为什么有两种不同的模式:抽象工厂和工厂方法

时间:2012-05-18 22:13:12

标签: design-patterns

据我所知:

抽象工厂模式提供了一个接口 创建一系列对象而工厂方法 提供了创建一个对象的界面。

如果这只是这些模式之间的差异,为什么要单独考虑它们?

3 个答案:

答案 0 :(得分:3)

工厂方法已修复 - 您无法在运行时更改它。

抽象工厂允许您使用不同的工厂创建对象,可以在运行时选择,具体取决于某些条件。

Button button = WinButtonFactory.create(); //will always be a "windows button"
Button button = buttonFactory.create();
第二天的

可以是WinButtonFactory extends ButtonFactoryMacOSXButtonFactory extends ButtonFactory。您可以根据当前操作系统传递其中一个。

答案 1 :(得分:3)

回顾这两种模式的定义告诉我们

  • Factory Method用于定义用于创建对象的界面,但让子类决定实例化哪个类。 Factory Method允许类将实例化延迟到子类。“

  • 抽象工厂用于提供用于创建相关或依赖对象系列的界面,而无需指定其具体类。

所以你说的是对的。工厂方法涉及创建(通常)一个对象,而抽象工厂涉及多个相关对象。

但那不是全部。如果你看看我在每个意图中加粗的第二个单词,就每个模式的作用机制而言,你会看到另一个区别。

  • Factory方法使用SUBCLASSES和继承将实例化委托给具体实现。这意味着要创建新产品,您必须继承“creator”类并覆盖工厂方法。反过来,该工厂方法返回所需的产品。

  • 另一方面,Abstract Factory使用OBJECT组合(即工厂)进行委托。您必须在“product”类中进行代码更改,而不是在creator类中进行。具体来说,在产品类中,您定义了几个相关的产品(比如说产品的成分),每个产品都可以使用工厂OBJECT(在产品类中组成,并在运行时传递)创建。在这种情况下,创建者类只创建抽象产品,并将产品将使用的工厂传递给该产品。

然而,为了使事情有点混乱,抽象工厂中的中央抽象工厂通常实现工厂方法。这个中央工厂通常为所有成分定义一系列工厂方法,并将每种成分的创建委托给具体工厂。

希望它有所帮助。请记住,许多设计模式非常相似,实际上它们是相关的,例如看看Decorator模式和Adapter模式。大多数时候,两种设计模式之间的差异在于它们各自的意图。顺便说一句,关于设计模式的好书是我真正喜欢的Head First Design Pattern。并且发布了一个类似的问题here

答案 2 :(得分:0)

抽象工厂模式意味着拥有工厂工厂(具体实施)。