【个人笔记】一个例子理解工厂模式

工厂模式优点:创建时类名过长或者参数过多或者创建很麻烦等情况时用,可以减少重复代码,简化对象的创建过程,避免暴露创建逻辑,也适用于需要统一管理所有创建对象的情况,比如线程池的工厂类Executors

简单工厂 :用一个工厂类封装对象的创建过程,要获取对象直接从工厂类获取

(专卖比亚迪秦的生产工厂,只卖秦)

优点:就是一开始说的那些

缺点:不符合开闭原则(对扩展是开放的,对修改是关闭的),要换产品就得改工厂类的代码

(如果秦不好卖,客户(要使用对象的方法)让你改卖宋,你就得把生产线(源码)换成宋的生产线,很麻烦)

工厂方法 :定义一个工厂接口,具体要生产啥对象由实现类决定。(专卖比亚迪的工厂,目前只生产秦,你要宋我就再开一个专卖宋的厂)

优点:不需要对原工厂进行修改

(不用换秦的生产线,直接开一家新工厂生产宋)

缺点:一个工厂对应一个产品,每增加一个产品就要新增一个具体的工厂类,增加系统复杂度

(那我多一个子品牌就得多开一家工厂,那多麻烦)

抽象工厂 :定义一个工厂接口,把类似的对象归纳到同一个工厂实现类(比亚迪工厂)中,一个实现类可以有多个生产不同对象(秦、宋、汉)的方法。

(啥车都卖,目前只卖比亚迪(实现类),厂里还能生产秦、宋、汉(类里的方法),你要问界M7我就再开一个问界的厂(实现类),先卖M7(类里的方法),有人要M5的话也可以产)

优点:不同工厂之间有比较多相同点时可以使用抽象工厂模式,可以提高组件的复用性;解决跨平台带来的兼容问题

缺点:增加新的产品等级结构麻烦,需要对原有结构进行较大的修改,甚至需要修改抽象层代码

例子总结:

简单工厂:比亚迪的秦

工厂方法:比亚迪的秦、比亚迪的宋、比亚迪的汉

抽象工厂:比亚迪(秦、宋、汉)

相关推荐
paopaokaka_luck13 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_322414280413 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
考虑考虑14 小时前
JDK26的JEP 500属性
java·后端·java ee
LMT流氓兔14 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节
yuniko-n14 小时前
【JUC】四种内存屏障示例
java·1024程序员节
解决小子15 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
破芽15 小时前
learn-claude-code-s05-s11-学习笔记
笔记·学习
念何架构之路16 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
liangbo716 小时前
03-JDK 10/11 局部变量推断与 LTS:var 到底该怎么用
java
Percep_gan17 小时前
调用天翼云的对象存储ZOS,很详细
java·1024程序员节