工厂方法模式中的继承与抽象工厂模式中的组合

时间:2017-07-24 15:06:00

标签: design-patterns abstract-factory factory-method

我正在浏览Factory Method Pattern和Abstract Factory方法模式的维基页面。

从Head First Design Patterns我得到了这个

  

工厂方法Pattern使用继承,Abstract Factory Pattern使用   组成。抽象工厂模式也像工厂方法模式一样,它使客户端与具体类型分离,但以不同的方式。

在分析维基示例后,我无法在示例中找到合成。两个模式都使用继承。

工厂方式模式

enter image description here

抽象工厂模式

enter image description here

以下是我的问题。

  1. 与Abstract Factory Method Pattern不同,Factory Method Pattern是否只有一个Abstract Product继承树?
  2. 哪里可以使用或编程某种方式的作文?如果它只是带有main方法的Client,那么Factory Method Pattern也使用Composition。代码片段示例将清除这一概念。
  3. 我对样本草图中的这些模式的解释是否正确?

1 个答案:

答案 0 :(得分:0)

是的,正如“Fuhrmanator”所指出的,它看起来重复。提到的问题 - 答案提供了关于这两种模式的良好解释。简而言之,GOF设计模式目录中讨论了三种带有“工厂”术语的模式。这三个都是创作模式。大多数人在使用术语“工厂模式”时使用静态工厂实现。

静态工厂是在一种自然方法中封闭具体类创建的便捷方式

AbstractProduct getProduct(key){
    if (key == ...) return new ConcreteProduct1();
    ... so on.
} 

工厂方法是一个单独的抽象方法,作为一个钩子来延迟具体产品的实例化。当我们编写用于编写业务逻辑的框架时,这非常有用,但我们不想假设客户端开发人员将在以后编写的具体类(此逻辑适用于此)。 (这里不重复模式的UML图)

抽象工厂模式是工厂方法的更一般情况,我们需要限制可以实例化和使用的产品类型但是完整的风味变化(我们不会在各种风味之间切换)通过应用生活)。

e.g。抽象 ShapeFactory 可能提供用于创建3个形状(如圆形,方形和矩形)的界面,而具体工厂 FilledShapeFactory HollowShapeFactory 将被绑定提供这三种形状的填充和空心版本(混凝土工厂不能自由决定新形状或掉落任何形状)。

当各种形状(产品)发生变化时,不能使用此模式,因为它会强制改变界面并影响客户。

风味变化的原因可能是由于父环境,操作系统或任何其他影响严重的参数。