抽象工厂模式广泛用于软件开发过程中。《设计模式:可复用面向对象软件的基础》指出抽象工厂模式的意图在于提供一系列相关或相互依赖对象的接口,而无需指定它们具体的类。该模式适用于以下情况:
(1) 一个系统要独立于它的产品创建、组合和表示时;
(2) 一个系统要由多个产品系列中的一个来配置时;
(3) 当你要强调一系列相关的产品对象的设计以便进行联合使用时;
(4) 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
该模式将得到以下效果:
(1) 它分离了具体的类;
(2) 它使得易于交换产品系列;
(3) 它有利于产品的一致性;
但是,同时该模式难以支持新种类的产品,这是因为AbstractFactory接口确定了可以被创建的产品的集合。支持新种类的产品就需要扩展该工厂接口,这将涉及AbstractFactory类及其所有子类的改变。所以我们对该模式结构进行了一些修改,修改后结构类图如下:
而软件对接口显示类的实例化过程交给界面显示类工厂类(UserControlFactory),“工厂”则根据“Interface-ConcreteClass Map”提供的数据,自动创建软件所需的界面显示类实例。如此,只需更改配置文件而不需要修改代码就可以实现对“组件X”到“组件Y”的切换,将大大简化开发的工作量。
对“Interface-ConcreteClass Map”的来源,可以从两个方面获取:配置文件、具体类特性标记。
1)通过配置文件获取“接口-类”键值对数据内容方法如下:
(1)配置文件内容如下:
(2)获取配置文件数据方法
2)通过程序集类的特性标记获取“接口-类”键值对数据内容方法如下:
3)通过接口类型创建对象实例函数如下