Abstract Factory模式
《设计模式》:为创建一组或相互依赖的对象提供一个接口,而且无需指定它们的具体类。
示例
需求:给不同机器的配置不同驱动程序:
驱动功能 | 在低配置机上,使用…… | 在高配置机上,使用…… |
---|---|---|
显示 | LRDD低分辨率显示驱动程序 | HRDD高分辨率显示驱动程序 |
打印 | LRPD低分辨率打印驱动程序 | HRPD高分辨率打印驱动程序 |
- 如果使用switch-case结构,会导致紧耦合、低内聚
- 如果直接使用继承,会造成组合爆炸,含义不清。
- 如果直接组合显示驱动程序抽象类和打印驱动程序抽象类也会组合多余(比如,低分辨率显示+高分辨率打印)。
解决方案
建立:
1、抽象工厂ResFactory
2、具体工厂LowResFactory和HighResFactory
Abstract Factory模式 | 关键特征 |
---|---|
意图 | 需要为特定的客户(或情况)提供对象组 |
问题 | 需要实例化一组对象 |
解决方案 | 协调对象组的创建。提供一种方式,将如何执行对象实例化的规则从使用这些对象的客户对象中提取出来 |
参与者与协作者 | Abstract Factory为如何创建对象组的每个成员定义接口。一般每个组都有独立地Concrete Factory进行创建 |
效果 | 这个模式将“使用那些对象”的规则与“如何使用这些对象”的逻辑分离开来 |
实现 | 定义一个抽象类来指定创建哪些对象。然后为每个组实现一个具体类。可以用表或文件完成同样的任务。 |
参考《设计模式解析》第二版