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

What is the motivation of using factory method pattern rather than simple factory

让我感到困惑的是这篇文章说在简单工厂上使用工厂方法的动机是要覆盖违反开放封闭原则的行为(检查简单工厂模式部分的问题 here) 但是在《头脑优先设计模式》一书中,示例仍然违反了开闭原则,如本 link

中的图片所示

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

看来您在工厂方法模式中有一个简单工厂。您可以通过创建新的 类(NYPizzaStoreLAPizzaStore、...)来添加新的 PizzaStore,即没有开关。但是 NYPizzaStore 使用简单工厂来创建比萨饼(以及内部的开关)。

请参阅 this question 了解工厂之间的差异。

关于开闭原则:PizzaStore修改关闭(定义了抽象行为,国外类可以依赖),但不限制添加新店: 开放扩展。

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

Simple Factory Pattern is not a part of Gang of Four (GoF) book but Factory Method Pattern and Abstract Factory Patterns are part of this standard book.

Simple Factory Pattern (SFP) 在文章中几乎被描述为 Factory Method Pattern (FMP),看起来有点像懒惰开发人员的解决方案。 SFP 只推出一个 class 就创造了各种粉丝。 FMP 为每种风扇类型引入一个工厂。现在,假设在示例控制台应用程序 FanType 中由客户端提供。你将如何实施?无论如何,您需要创建 switchif-else 对。所以这取决于你把这种代码放在哪里。看起来 SFP: 是 switch + new 基于参数。

book below this picture you can find的另一边:

So, by encapsulating the pizza creating in one class, we now have only one place to make modifications when the implementation changes.

Don’t forget, we are also just about to remove the concrete instantiations from our client code.

所以,回答你的问题:这两个与 Factory Method Design Pattern point of view and it's intents. It depends on which level you want to implement switch or if-else pairs. See this example: Factory Method in Java 相同,它被移动到 main 方法。