设计模式之抽象工厂
1. 定义
提供一种方式来创建一组相关或相互依赖的对象,而无需指定它们的具体类
2. 口语化举例
工厂里组装台灯,流程、配件等有多种方式,每种台灯有自己的生产线
现在,需要某一种台灯,一种方式是直接去找这个台灯的生产线生成,这会令人烦恼,因为寻找是一件无聊而繁琐的事情
另一种方式是成立一个工厂前台,需要什么台灯就只需要给前台说明,前台会给你一份说明书,说明书会告诉你去哪找生产线生产台灯
这流程就简单多了,不管是谁来,他都只需和前台联系,然后前台就会告诉她如何去找到生产台灯的生产线并最后得到台灯,这就是抽象工厂模式
注意,和简单工厂模式相比,这种模式并没有直接给出产品(台灯),但是给出了如何找到产品的方法
(下面的描述会沿用这个上述这个场景)
3. 个人理解
简单工厂模式是一种常用、易懂的设计模式,但在面对复杂的对象创建过程时也会变得繁杂
比如,最开始工厂只生产三五种台灯,只需要添加一个前台,这个前台负责寻找客户、联系生产人员、收发产品;随着工厂业务拓展,开始生产上百种台灯,数量的增多导致前台的业务开始变得繁重
为了减少前台的工作量,现在,前台不再负责联系生产人员、收发产品,只负责联系客户并给客户说明如何得到他们想要的产品,具体的产品由客户自己去搞定
所以,抽象工厂模式是对简单工厂模式的优化,抽象工厂模式不再给出具体的产品,而是与产品相关的东西
一种自下而上的理解是,抽象工厂是对简单工厂的进一步封装,是对多个简单工厂的概括
一种自上而下的理解是,抽象工厂规定了一些规则,具体工厂必须按照这些规则生产产品(可参考编程中常见的抽象类或者接口)
4. 总结
4.1 设计原则
-
单一职责原则
每个生产线只负责生产自己的产品,前台只负责联系客户,职责明确
-
开闭原则
要添加新的产品线只需告诉前台即可
4.2 适用场景
-
无法提前获取相关信息,或者出于对未来扩展性的考虑
无法确定每次具体生产什么,所以前台联系客户并给客户说明如何得到他们想要的产品
-
构建能扩展的软件库或框架的内部组件, 可使用工厂方法
前台的存在使得要添加新的产品线只需告诉前台即可
-
构建基于一组抽象方法的类, 可使用抽象工厂模式

浙公网安备 33010602011771号