[英]What is the motivation of using factory method pattern rather than simple factory
令我困惑的是,这篇文章说使用工厂方法超过简单工厂的动机要覆盖打开封闭原则违规( 在这里检查简单工厂模式问题部分)但在头部设计模式书中的例子仍然违反了开放封闭原则,如此链接中的图像
那么使用工厂方法比简单工厂有什么好处?
在工厂模式 - 简单工厂模式文章作者写道:
简单工厂模式不是Gang of Four(GoF)书籍的一部分,但工厂方法模式和抽象工厂模式是本标准书的一部分。
简单工厂模式 (SFP)在文章中几乎被描述为工厂方法模式 (FMP),看起来有点像懒惰开发人员的解决方案。 SFP只引入了一个创建各种粉丝的类。 FMP为每种风扇类型引入了一个工厂。 现在,假设在示例中,控制台应用程序FanType
由客户端提供。 你将如何实现? 无论如何,您需要创建switch
或if-else
对。 所以这取决于你放置这种代码的位置。 看起来像SFP:是基于参数的switch
+ new
。
从这张图片下方的书中的另一面你可以找到 :
因此,通过将pizza创建封装在一个类中, 我们现在只有一个位置可以在实现更改时进行修改 。
不要忘记,我们也只是要从客户端代码中删除具体的实例。
那么,回答你的问题:从工厂方法设计模式的角度来看这两个是相同的,它是意图。 这取决于您希望实现switch
或if-else
对的级别。 请参阅此示例: Java中的Factory方法,将其移至main方法。
看来你在 Factory Method模式中有一个Simple Factory。 您可以通过创建新类( NYPizzaStore
, LAPizzaStore
,...)来添加新的PizzaStore
,即无需切换。 但是NYPizzaStore
使用Simple Factory来制作比萨饼(以及里面的开关)。
有关工厂之间的差异,请参阅此问题
关于开放封闭原则: PizzaStore
因修改而关闭(抽象行为已定义且外部类可依赖它),但添加新商店没有限制:open for extension。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.