Design patterns 为什么有两种不同的模式:抽象工厂和工厂方法
在我看来: 抽象工厂模式为 使用factory方法创建对象族 提供用于创建一个对象的接口Design patterns 为什么有两种不同的模式:抽象工厂和工厂方法,design-patterns,Design Patterns,在我看来: 抽象工厂模式为 使用factory方法创建对象族 提供用于创建一个对象的接口 如果这是这些模式之间的唯一区别,那么为什么要单独考虑它们?工厂方法是固定的-您不能在运行时更改它 抽象工厂允许您使用不同的工厂创建对象,这些工厂可以在运行时选择,具体取决于某些条件 Button button = WinButtonFactory.create(); //will always be a "windows button" Button button = buttonFactory.creat
如果这是这些模式之间的唯一区别,那么为什么要单独考虑它们?工厂方法是固定的-您不能在运行时更改它 抽象工厂允许您使用不同的工厂创建对象,这些工厂可以在运行时选择,具体取决于某些条件
Button button = WinButtonFactory.create(); //will always be a "windows button"
Button button = buttonFactory.create();
第二个类似的例子可以是
WinButtonFactory扩展ButtonFactory
或MacOSXButtonFactory扩展ButtonFactory
。根据当前操作系统的不同,您可以传递其中一种方法。工厂方法是固定的-您不能在运行时更改它
抽象工厂允许您使用不同的工厂创建对象,这些工厂可以在运行时选择,具体取决于某些条件
Button button = WinButtonFactory.create(); //will always be a "windows button"
Button button = buttonFactory.create();
第二个类似的例子可以是
WinButtonFactory扩展ButtonFactory
或MacOSXButtonFactory扩展ButtonFactory
。根据当前操作系统的不同,您可以传递一个或另一个。抽象工厂模式意味着为工厂创建工厂(具体实现)。抽象工厂模式意味着为工厂创建工厂(具体实现)。回顾这两个模式的定义告诉我们
- 工厂方法用于定义用于创建对象的接口,但让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类。”
- 抽象工厂用于提供一个接口,用于创建相关或从属对象的族,而无需指定其具体类
- Factory方法使用子类和继承将实例化委托给具体实现。这意味着要创建新产品,必须继承“creator”类并重写Factory方法。此Factory方法反过来返回所需的产品
- 另一方面,抽象工厂使用对象组合(即工厂)进行委托。您必须在“product”类中更改代码,而不是在creator类中。具体而言,在product类中,您定义了几个相关的产品(比如说产品的成分),每个产品都可以使用Factory对象创建(由product类组成,并在运行时传递)。在这种情况下,creator类只创建抽象产品,并将产品将使用的工厂传递给该产品
希望能有所帮助。请记住,许多设计模式非常相似,事实上它们是相关的,例如,看看装饰器模式和适配器模式。大多数情况下,两种设计模式之间的差异在于它们各自的意图。顺便说一句,关于设计模式的一本好书,我非常喜欢。还有一个类似的问题uestion posted.回顾一下这两种模式的定义告诉我们
- 工厂方法用于定义用于创建对象的接口,但让子类决定实例化哪个类。工厂方法允许类将实例化推迟到子类。”
- 抽象工厂用于提供一个接口,用于创建相关或从属对象的族,而无需指定其具体类
- Factory方法使用子类和继承将实例化委托给具体实现。这意味着要创建新产品,必须继承“creator”类并重写Factory方法。此Factory方法反过来返回所需的产品
- 另一方面,抽象工厂使用对象组合(即工厂)进行委托。您必须在“product”类中更改代码,而不是在creator类中。具体而言,在product类中,您定义了几个相关的产品(比如说产品的成分),每个产品都可以使用Factory对象创建(由product类组成,并在运行时传递)。在这种情况下,creator类只创建抽象产品,并将产品将使用的工厂传递给该产品