使用工厂方法模式而不是简单工厂的动机是什么

时间:2019-09-12 06:45:22

标签: java design-patterns factory abstract-factory

让我感到困惑的是,这篇文章说,在简单工厂上使用工厂方法来覆盖开放式封闭原则的动机(用简单工厂模式检查问题here部分) 但在第一本设计模式书中,该示例仍然违反了此链接中图像中的开放闭合原则

enter image description here

那么使用工厂方法比简单工厂有什么好处?

2 个答案:

答案 0 :(得分:1)

作者在Factory Patterns - Simple Factory Pattern中写道:

  

简单工厂模式不是Gang of Four (GoF)书的一部分,而是   工厂方法模式和抽象工厂模式是其中的一部分   标准书。

简单工厂模式(SFP)在文章中几乎被描述为工厂方法模式(FMP),看起来有点像是懒惰的开发人员的解决方案。 SFP仅引入一类会创建各种风扇的类。 FMP为每种风扇类型引入一个工厂。现在,假设在示例控制台应用程序FanType由客户端提供。您将如何实施?无论如何,您都需要创建switchif-else对。因此,这取决于您将此类代码放置在何处。看起来像SFP:是switch + new,基于参数。

book below this picture you can find的另一面来看:

  

因此,通过将创建的披萨封装在一个类中,我们现在只有   更改实现时可以在一个地方进行修改

     

别忘了,我们也将删除具体内容   我们的客户代码实例化。

因此,请回答您的问题:从Factory Method Design Pattern的角度来看,这两个都是相同的,并且都是出于意图。这取决于您要实现switchif-else对的级别。请参见以下示例:Factory Method in Java,将其移至main方法。

答案 1 :(得分:0)

似乎您的工厂方法模式中有一个简单的工厂 。您可以通过创建新类(PizzaStoreNYPizzaStore,...)来添加新的LAPizzaStore,即无需切换。但是NYPizzaStore使用简单工厂来制作披萨(以及内部的开关)。

有关工厂之间的差异,请参见this question

关于开闭原则:PizzaStore已关闭以进行修改(定义了抽象行为,并且外部类可以依赖它),但是添加新存储区没有任何限制:可以扩展。 / p>

相关问题