让我感到困惑的是,这篇文章说,在简单工厂上使用工厂方法来覆盖开放式封闭原则的动机(用简单工厂模式检查问题here部分) 但在第一本设计模式书中,该示例仍然违反了此链接中图像中的开放闭合原则
那么使用工厂方法比简单工厂有什么好处?
答案 0 :(得分:1)
作者在Factory Patterns - Simple Factory Pattern中写道:
简单工厂模式不是Gang of Four (GoF)书的一部分,而是 工厂方法模式和抽象工厂模式是其中的一部分 标准书。
简单工厂模式(SFP)在文章中几乎被描述为工厂方法模式(FMP),看起来有点像是懒惰的开发人员的解决方案。 SFP仅引入一类会创建各种风扇的类。 FMP为每种风扇类型引入一个工厂。现在,假设在示例控制台应用程序FanType
由客户端提供。您将如何实施?无论如何,您都需要创建switch
或if-else
对。因此,这取决于您将此类代码放置在何处。看起来像SFP:是switch
+ new
,基于参数。
从book below this picture you can find的另一面来看:
因此,通过将创建的披萨封装在一个类中,我们现在只有 更改实现时可以在一个地方进行修改。
别忘了,我们也将删除具体内容 我们的客户代码实例化。
因此,请回答您的问题:从Factory Method Design Pattern的角度来看,这两个都是相同的,并且都是出于意图。这取决于您要实现switch
或if-else
对的级别。请参见以下示例:Factory Method in Java,将其移至main方法。
答案 1 :(得分:0)
似乎您的工厂方法模式中有一个简单的工厂 。您可以通过创建新类(PizzaStore
,NYPizzaStore
,...)来添加新的LAPizzaStore
,即无需切换。但是NYPizzaStore
使用简单工厂来制作披萨(以及内部的开关)。
有关工厂之间的差异,请参见this question。
关于开闭原则:PizzaStore
已关闭以进行修改(定义了抽象行为,并且外部类可以依赖它),但是添加新存储区没有任何限制:可以扩展。 / p>