抽象工厂模式广泛用于软件开发过程中。《设计模式:可复用面向对象软件的基础》指出抽象工厂模式的意图在于提供一系列相关或相互依赖对象的接口,而无需指定它们具体的类。该模式适用于以下情况:
(1) 一个系统要独立于它的产品创建、组合和表示时;
(2) 一个系统要由多个产品系列中的一个来配置时;
(3) 当你要强调一系列相关的产品对象的设计以便进行联合使用时;
(4) 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
该模式将得到以下效果:
(1) 它分离了具体的类;
(2) 它使得易于交换产品系列;
(3) 它有利于产品的一致性;
但是,同时该模式难以支持新种类的产品,这是因为AbstractFactory接口确定了可以被创建的产品的集合。支持新种类的产品就需要扩展该工厂接口,这将涉及AbstractFactory类及其所有子类的改变。所以我们对该模式结构进行了一些修改,修改后结构类图如下: