抽象工厂模式(Abstract Factory Pattern)
属创建型设计模式,「为创建一组相关或相互依赖的对象提供一个接口,而且无须指定他们的具体类」
这个模式建议结合工厂方法模式来理解 必知必会的设计模式3,本身这些东西是比较抽象的,所以在理解的时候建议结合一下实际情况中的一些场景,毕竟这些设计模式也是为了解决实际生产问题的,不然要他们有什么用。我在理解抽象工厂模式的时候,也花了些时间,还回头重新整理回顾了工厂方法模式。
在工厂方法模式中我们知道如果一个工厂可以生产多个产品,如果复杂的话会按产品隔离开变成多工厂模式,这里我们先不隔离开,因为各个产品间是有关联的或者说是有某种关系的,例如,大众集团下有 SUV 汽车,轿跑汽车等产品,它们都属于大众集团(这就是关联)。这些产品就叫产品族,例如 SUV 汽车产品族,轿跑汽车产品族。其次,每个产品族还可进行产品等级划分,一个工厂子类负责一个产品等级的产生,例如大众集团的 SUV 汽车产品族可按产品定位分奥迪 SUV,保时捷 SUV,因此也对应着奥迪工厂和保时捷工厂。
抽象工厂模式.jpg优缺点
- 高度封装,调用者不用关心产品实现类。
- 产品族间的关联或约束是内定的,不受外界影响或改变。
- 产品等级维度的扩展性好。
- 产品族的扩展性非常差。
适用场景
其实上面对抽象工厂模式的分析过程就是对适用场景的分析。我的理解是基于一个工厂生产多个产品的前提下,如果每个产品(或者部分产品)已经是一个产品族(或者未来是个产品族),并且也会有产品等级的概念,那就可以用抽象工厂模式。不过对于功能较简单的模块,我觉得不太适合用。
在 Android 中的使用
暂未了解到有明显使用抽象工厂模式的地方。
参考内容
「设计模式之禅(第 2 版)」
「Android 源码设计模式解析与实战」
网友评论