gpt4 book ai didi

design-patterns - 设计模式: Abstract Factory vs Factory Method

转载 作者:行者123 更新时间:2023-12-03 04:25:31 29 4
gpt4 key购买 nike

注意:问题位于帖子末尾。

我已经阅读了有关抽象工厂与工厂方法的其他 stackoverflow 线程。我理解每种模式的意图。不过我不太清楚这个定义。

Factory Method defines an interface for creating an object, but lets subclasses decide which of those to instantiate. A factory method lets classes defer instantiation to subclasses.

By contrast, an Abstract Factory provides an interface for creating families of related or dependent objects without specifying their concrete classes.

-John Feminella

抽象工厂看起来与工厂方法非常相似。我画了几个 UML 类来说明我的观点。

注意:

  • 图表来自www.yuml.com,因此它们的方向并不完美。但它是免费服务:)。
  • 图表可能并不完美。我仍在学习 GoF 设计模式。

工厂方法:

Factory Method

抽象工厂(只有 1 名成员):

Abstract Factory (only 1 member)

抽象工厂(更多成员):

alt text

问题:

  1. 如果抽象工厂只有一个创建者和一个产品,它还是抽象工厂模式吗? (创建家族的界面)
  2. 工厂方法具体创建者可以从接口(interface)创建还是必须从类创建? (类将实例化推迟到子类)
  3. 如果抽象工厂只能有一个创建者和一个产品,那么抽象工厂工厂方法之间的唯一区别是前者的创建者是一个接口(interface)和后者的创建者是一个类?

最佳答案

希望这有帮助。它描述了各种类型的工厂。我用了Head First Design Patterns书作为我的引用。我用过yuml.me绘制图表。

静态工厂

是一个具有静态方法的类,用于生成产品的各种子类型。

Static Factory

简单工厂

是一个可以产生Product的各种子类型的类。 (它比静态工厂更好。添加新类型时,不需要更改产品基类,只需更改简单工厂类)

Simple Factoryt

工厂方法

包含一种方法来生产与其类型相关的一种产品。 (它比简单工厂更好,因为类型被推迟到子类。)

Factory Method

抽象工厂

产生一系列相关的类型。它与工厂方法明显不同,因为它生成的类型有不止一种方法。 (这很复杂,请参阅下图以获得更好的现实生活示例)。

Abstract Factory

.NET Framework 的示例

DbFactoriesProvider 是一个简单工厂,因为它没有子类型。 DbFactoryProvider 是一个抽象工厂,因为它可以创建各种相关的数据库对象,例如连接和命令对象。

Abstract Factory From .NET Framework​​​

关于design-patterns - 设计模式: Abstract Factory vs Factory Method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209791/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com