Headfirst设计模式,抽象工厂模式是否天生就采用了工厂模式?

headfirst design pattern, does abstract factory pattern inherently employs factory pattern?

提问人:Lee Soobin 提问时间:11/13/2023 更新时间:11/16/2023 访问量:31

问:

我已经通读了这篇文章。抽象工厂和工厂设计模式之间有什么区别?

但我对抽象工厂模式仍然有一些不确定性。我的问题是抽象工厂模式是否本质上采用了工厂设计模式作为其实现的一部分。我想了解抽象工厂模式是否通常包含工厂模式来创建其相关对象,如果是,这两种模式在实践中是如何相互关联的。

设计模式

评论

0赞 jaco0646 11/16/2023
我建议接受这两种模式无关的答案。虽然这个答案与GoF的书相矛盾,但在十多年的搜索中,我从未见过一个连贯的解释,即抽象工厂是如何通过工厂方法实现的,而这种解释保留了对工厂方法是什么的任何有意义的定义。在这一点上,这本书本身是模糊和矛盾的。在研究这个问题时,你会发现无数的胡说八道的想法,比如在GoF书之外发明的“工厂中的工厂”。
0赞 Lee Soobin 11/20/2023
我想我之所以好奇抽象工厂模式是否在内部使用工厂模式,是因为平台工厂是基于下面文章中的继承创建的。当我读到下面关于这部分的文章时,它说这部分可以用原型模式代替,我意识到我的想法实际上是错误的。感谢您的善意通知。sourcemaking.com/design_patterns/abstract_factory

答:

0赞 Doc Brown 11/16/2023 #1

在抽象工厂模式中,接口包含一个或多个“创建”方法,这些方法负责创建特定类型的对象,通常称为“产品”。然而,这些不是“工厂方法”,因为它们不能决定他们必须创造哪种具体产品。所以不,混凝土工厂在实施过程中不采用工厂方法。AbstractFactory

对特定混凝土产品组的这种决定通常是在不同的地方做出的:在选择特定推导的地方 - 这是需要工厂方法的地方 - 不是为了创造产品,而是为了创造混凝土工厂本身。AbstractFactory

评论

0赞 jaco0646 11/16/2023
GoF 抽象工厂模式始终包含多个方法。每个方法返回不同的 Product,GoF 将 Products 集合称为“系列”。GoF抽象工厂模式的目的是在产品系列中强制执行约束(例如主题)(第88页)。GoF声称,“[实现抽象工厂]的最常见方法是为每个产品定义一个工厂方法。(第 90 页)然而,GoF 还声称,“工厂方法通常在模板方法中调用。(第 116 页)调和这些陈述会导致兔子洞。
0赞 Doc Brown 11/17/2023
@jaco0646: - 在 AbstractFactory 接口中只有一个创建方法是非常有意义的。书中的示例总是包含多个方法,以使目的更加明确,但“产品系列”也可以是一组相同类型的产品对象,由一种方法创建。
0赞 jaco0646 11/17/2023
在GoF书中没有,它不能。这让很多人感到困惑,因为在 OOP 中,“family”一词通常意味着继承层次结构。在 GoF 抽象工厂模式中,它总是意味着不同的东西。至少在这一点上,它们是一致的。
0赞 Lee Soobin 11/20/2023
我想我之所以好奇抽象工厂模式是否在内部使用工厂模式,是因为平台工厂是基于下面文章中的继承创建的。当我读到下面关于这部分的文章时,它说这部分可以用原型模式代替,我意识到我的想法实际上是错误的。感谢您的善意通知。sourcemaking.com/design_patterns/abstract_factory