设计模式:抽象工厂与工厂方法

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我画了几个UML类来说明我的观点。

注:

  • 图表来自www.yuml.com所以它们不是完全定向的。
  • 这些图表可能并不完美。我还在学习戈夫设计模式。

工厂方法:

摘要工厂(只有一名成员):

抽象工厂(更多成员):

问题:

  1. 如果抽象工厂只有一个创建者和一个产品,它仍然是抽象工厂模式?(创建家庭的接口)
  2. 工厂法具体的创建者是从一个接口创建的,还是必须从一个类中创建?(类将实例化推迟到子类)
  3. 如果抽象工厂只能有一个创建者和一个产品,那么抽象工厂工厂法前者的创建者是一个接口,而后者的创建者是一个类?
提问于
用户回答回答于

静态工厂

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

简单工厂

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

工厂法

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

抽象工厂

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

.NET框架中的示例

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

用户回答回答于

这两种模式当然是相关的!

模式之间的区别通常在于意图。

意图工厂法是“定义一个创建对象的接口,但是让子类来决定要实例化哪个类。工厂方法允许类将实例化推迟到子类。“

意图抽象工厂is“提供一个接口,用于创建相关或依赖对象的系列,而不指定它们的具体类。”

它们也与执行有关,

抽象工厂只声明一个用于创建产品的接口。这取决于ConcreteProduct子类是否真正创建它们。最常见的方法是为每个产品定义一个工厂方法。

扫码关注云+社区