Tim*_*Tim 8 oop design-patterns factory-method abstract-factory
来自GOF书:
类模式处理类及其子类之间的关系.这些关系是通过继承建立的,因此它们在编译时是静态修复的.对象模式 处理对象关系,可以在运行时更改它们并且更加动态.几乎所有模式都在某种程度上使用继承.所以标记为"类模式"的唯一模式是那些关注类关系的模式.
为什么工厂方法是一个类模式,而抽象工厂是一个对象模式,因为它们似乎是非常相似的模式?
谢谢.
GOF书上说
意图
定义一个用于创建对象的接口,但让子类决定实例化哪个类。
这是什么意思?让我们看一下书中展示的示例。
在示例中,框架定义了Application接口以让其他人实现它。这意味着我可以实现例如 aMyApplication或MyOtherApplication这样的:
public class MyApplication extends Application {
protected Document createDocument() {
return new MyDocument();
}
}
public class MyOtherApplication extends Application {
protected Document createDocument() {
return new MyOtherDocument();
}
}
Run Code Online (Sandbox Code Playgroud)
当框架启动时,它可能会根据在类路径上找到的内容选择这些实现之一。
但这意味着在框架实例化之后,MyApplication或者MyOtherApplication创建文档的方式是固定的。在实例的运行时,不能再更改文档的创建方式Application。没有设置器或其他任何东西可以用来更改Document创建方式。因此它也被称为虚拟构造函数,因此它是一种类模式。
与工厂方法相反,抽象工厂可以在运行时更改,从而更改它创建对象的方式。这就是为什么他们说它是对象模式。
抽象工厂还负责创建
...相关或依赖对象的族...
这也是与工厂方法的区别。虚拟构造函数。