DP学习——简单工厂模式

学而时习之,温故而知新。

敌人出招(使用场景)

不同的业务场景下要创建不同的对象,但是这些对象又有共同的特点。如何复用代码呢?你会想到,这些对象可以抽象出一个基类/抽象类就行了,那么随着业务的增加,子类不断地增多,继承这抽象类的子类越来越多------零零散散的放在各个角落------有没有更好的组织、管理方式呢?

你出招

这个时候就要简单工厂模式这招了,它属于创建型设计模式。

具体招式

有3个角色组成------工厂类、抽象产品类和具体产品类。

工厂类是对上述说的多个具体产品子类的管理,把零零散散各个角落里的各个子类统一管理起来。一般在工厂类的构造函数里if else根据入参new出对应子类对象,返回其父类指针(抽象类指针)。

抽象产品类,是业务不变化的点。

具体产品类,是业务不断变化的点------就是可以不断扩展出新类。

这样的话在业务层面,根据不同业务的需求让工厂类创建不同的对象,实现业务需求。这样工厂类内部产品类的变化对业务层不可见,可以分开更新------在应用层面又抵抗了变化。

抽象产品类带来的另一个设计模式

因为抽象产品类是所有具体产品子类的抽象,这样就可以把所有具体产品类的处理流程节点抽象到抽象类的方法里,那么具体产品类负责实现------有没有发现,这是模板模式。

缺点

可以看到,每扩展一个具体产品类,都要修改工厂类的内部实现------这一点没有遵循开闭原则,这点不太好。

相关推荐
tianchang1 天前
打造你的本地AI助手:基于RAG+向量数据库的智能问答系统
人工智能·设计模式·node.js
IT小白架构师之路2 天前
常用设计模式系列(十八)-责任链模式
设计模式·责任链模式
源代码•宸2 天前
深入浅出设计模式——行为型模式之观察者模式 Observer
开发语言·c++·经验分享·观察者模式·设计模式·raii
快起来别睡了2 天前
前端设计模式:让代码更优雅的“万能钥匙”
前端·设计模式
使二颗心免于哀伤3 天前
《设计模式之禅》笔记摘录 - 14.组合模式
笔记·设计模式·组合模式
原则猫3 天前
装饰器工程运用-埋点
设计模式
愿天堂没有C++3 天前
剑指offer第2版——面试题2:实现单例
c++·设计模式·面试
静谧之心3 天前
分层架构下的跨层通信:接口抽象如何解决反向调用
java·开发语言·设计模式·架构·golang·k8s·解耦
用户84913717547164 天前
JustAuth实战系列(第5期):建造者模式进阶 - AuthRequestBuilder设计解析
java·设计模式·架构
只因在人海中多看了你一眼4 天前
B.10.01.5-电商系统的设计模式应用实战
设计模式