抽象工厂模式(Abstract Factory Pattern)
一、概念
前面2种模式(简单工厂模式和工厂模式)都是创建单一的产品
,即一个工厂只生产一种产品
,但是大部分的工厂都是多元产品的,
-
譬如:美的工厂生产空调,风扇,电饭煲,机器人;格力工厂: 空调,冰箱,电饭煲。以上两种模式都不可以实现。
抽象工厂模式就是解决此类问题的
;
- 抽象工厂模式(Abstract Factory Pattern):顾名思义,对工厂进行抽象,
在一个工厂里聚合创建多个同类产品、同系列产品方法
,无须指定产品具体的类型,就可以获取指定对象。
二、参与者
抽象产品:
具体产品:
抽象工厂:声明了工厂方法
具体工厂:具体的工厂方法,实现了抽象工厂,用来生产具体的产品
调用者:
三、代码例子
BMW320工厂 生产 BMW320变速箱和BMW320引擎
BMW520工厂 生产 BMW520变速箱和BMW520引擎
抽象产品:Engine 和 GearBox
具体产品:BMW320Engine、BMW520Engine 和 BMW320GearBox、BMW520GearBox
抽象工厂:AbstractFactory
具体工厂:BMW320Factory 和 BMW520Factory
四、UML图
五、特点
- 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
-
抽象工厂模式是工厂方法模式的升级版本
,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
六、优缺点
(一)优点
- 一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建);
(二)缺点
- 产品族扩展非常困难,要增加一个系列的某一产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码;
- 增加了系统的抽象性和理解难度;
七、抽象工厂模式与工厂方法模式区别
工厂方法模式:
- 一个抽象产品类,可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
- 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。
其他区别:
- 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个;
- 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个;
- 抽象工厂更像工厂,可以生产不同类的产品。而工厂方法则更像是工厂的一种产品生产线,生产同类不同规格的产品。
八、总结
工厂模式作为一种创建型模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了