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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

例子总结:

简单工厂:比亚迪的秦

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

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

相关推荐
b***66613 分钟前
Spring Boot 整合 Apollo 配置中心实战
java·spring boot·后端
CoderYanger18 分钟前
递归、搜索与回溯-综合练习:27.黄金矿工
java·算法·leetcode·深度优先·1024程序员节
closejudge32 分钟前
部署siyuan笔记docker问题记录
笔记
vx_vxbs6633 分钟前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea
张较瘦_34 分钟前
Springboot3 | ResponseEntity 完全使用教程
java·springboot·开发
毕设源码-郭学长35 分钟前
【开题答辩全过程】以 高校兼职系统为例,包含答辩的问题和答案
java·spring boot
黄嚯嚯37 分钟前
Jackson 多态反序列化详解:基于字段自动选择子类的优雅方案
java
h***381843 分钟前
SpringBoot - Cookie & Session 用户登录及登录状态保持功能实现
java·spring boot·后端
一只乔哇噻1 小时前
java后端工程师+AI大模型进修ing(研一版‖day57)
java·开发语言·人工智能·算法·语言模型
十五喵1 小时前
智慧物业|物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧物业管理系统