我正在浏览Factory Method Pattern和Abstract Factory方法模式的维基页面。
从Head First Design Patterns我得到了这个
工厂方法Pattern使用继承,Abstract Factory Pattern使用 组成。抽象工厂模式也像工厂方法模式一样,它使客户端与具体类型分离,但以不同的方式。
在分析维基示例后,我无法在示例中找到合成。两个模式都使用继承。
工厂方式模式
抽象工厂模式
以下是我的问题。
答案 0 :(得分:0)
是的,正如“Fuhrmanator”所指出的,它看起来重复。提到的问题 - 答案提供了关于这两种模式的良好解释。简而言之,GOF设计模式目录中讨论了三种带有“工厂”术语的模式。这三个都是创作模式。大多数人在使用术语“工厂模式”时使用静态工厂实现。
静态工厂是在一种自然方法中封闭具体类创建的便捷方式
AbstractProduct getProduct(key){
if (key == ...) return new ConcreteProduct1();
... so on.
}
工厂方法是一个单独的抽象方法,作为一个钩子来延迟具体产品的实例化。当我们编写用于编写业务逻辑的框架时,这非常有用,但我们不想假设客户端开发人员将在以后编写的具体类(此逻辑适用于此)。 (这里不重复模式的UML图)
抽象工厂模式是工厂方法的更一般情况,我们需要限制可以实例化和使用的产品类型但是完整的风味变化(我们不会在各种风味之间切换)通过应用生活)。
e.g。抽象 ShapeFactory 可能提供用于创建3个形状(如圆形,方形和矩形)的界面,而具体工厂 FilledShapeFactory 和 HollowShapeFactory 将被绑定提供这三种形状的填充和空心版本(混凝土工厂不能自由决定新形状或掉落任何形状)。
当各种形状(产品)发生变化时,不能使用此模式,因为它会强制改变界面并影响客户。
风味变化的原因可能是由于父环境,操作系统或任何其他影响严重的参数。