设计模式之抽象工厂

1. 定义

提供一种方式来创建一组相关或相互依赖的对象,而无需指定它们的具体类

2. 口语化举例

工厂里组装台灯,流程、配件等有多种方式,每种台灯有自己的生产线

现在,需要某一种台灯,一种方式是直接去找这个台灯的生产线生成,这会令人烦恼,因为寻找是一件无聊而繁琐的事情

另一种方式是成立一个工厂前台,需要什么台灯就只需要给前台说明,前台会给你一份说明书,说明书会告诉你去哪找生产线生产台灯

这流程就简单多了,不管是谁来,他都只需和前台联系,然后前台就会告诉她如何去找到生产台灯的生产线并最后得到台灯,这就是抽象工厂模式

注意,和简单工厂模式相比,这种模式并没有直接给出产品(台灯),但是给出了如何找到产品的方法

下面的描述会沿用这个上述这个场景

3. 个人理解

简单工厂模式是一种常用、易懂的设计模式,但在面对复杂的对象创建过程时也会变得繁杂

比如,最开始工厂只生产三五种台灯,只需要添加一个前台,这个前台负责寻找客户、联系生产人员、收发产品;随着工厂业务拓展,开始生产上百种台灯,数量的增多导致前台的业务开始变得繁重

为了减少前台的工作量,现在,前台不再负责联系生产人员、收发产品,只负责联系客户并给客户说明如何得到他们想要的产品,具体的产品由客户自己去搞定

所以,抽象工厂模式是对简单工厂模式的优化,抽象工厂模式不再给出具体的产品,而是与产品相关的东西


一种自下而上的理解是,抽象工厂是对简单工厂的进一步封装,是对多个简单工厂的概括

一种自上而下的理解是,抽象工厂规定了一些规则,具体工厂必须按照这些规则生产产品(可参考编程中常见的抽象类或者接口)

4. 总结

4.1 设计原则

  • 单一职责原则

    每个生产线只负责生产自己的产品,前台只负责联系客户,职责明确

  • 开闭原则

    要添加新的产品线只需告诉前台即可

4.2 适用场景

  • 无法提前获取相关信息,或者出于对未来扩展性的考虑

    无法确定每次具体生产什么,所以前台联系客户并给客户说明如何得到他们想要的产品

  • 构建能扩展的软件库或框架的内部组件, 可使用工厂方法

    前台的存在使得要添加新的产品线只需告诉前台即可

  • 构建基于一组抽象方法的类, 可使用抽象工厂模式

4. 参考资料

[1] 抽象工厂设计模式 (refactoringguru.cn)

posted @ 2023-09-29 21:47  当时明月在曾照彩云归  阅读(20)  评论(0)    收藏  举报