Abstract Factory
目的
提供一个创建一系列相关对象的接口,无需为它们指定具体的类
动机
假设有一个支持多种风格的界面工具包,此时不应该为每一种特定风格的组件进行硬编码。因此我们可以定一个WidgetFactory的抽象类,提供返回窗口组件,门组件等接口。这样,用户程序就只用与抽象类定义的接口进行交互,而不用与具体的类进行交互。
适用范围
- 一个系统要独立于它的产品创建、组合和创建;
- 一个系统由多个产品系列中的一个来配置;
- 强调一系列相关产品对象的设计以便进行联合使用;
- 提供一个产品类库,但只想显示接口而不是实现;
效果
- 分离了具体的类:由factory去帮助你控制一个应用创建的对象的类;
- 易于变换产品系列:只需要变换factory即可;
- 有利于产品的一致性:当一个应用只使用一个factory提供的产品即可实现;
- 难以支持新种类的产品(缺点):当扩展一个factory的新产品时,此时子类也必须全部发生变化;
源代码示范
1 | // Abstract_Factory.cpp : 定义控制台应用程序的入口点。 |