Spring学习笔记5 GoF之工厂模式

Spring学习笔记4 Bean的作用域_biubiubiu0706的博客-CSDN博客

出了GoF23种设计模式.还有javaee的设计模式(DAO模式,MVC模式)

设计模式:是一种可以被重复利用的解决方案

GoF23种设计模式可分为三大类:

创建型(5个):解决对象创建问题.

单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式

结构性(7个):一些类或对象组合在一起的经典结构

代理模式,装饰模式,适配器模式,组合模式,享元模式, 外观模式,桥接模式

行为型(11个):解决类或对象之间的交互问题

策略模式,模板方法模式,责任链模式, 观察者模式,迭代子模式,

命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式

工厂模式是解决对象创建的,属于创建型设计模式.Spring框架底层使用了大量的工厂模式

工厂模式通常有三种形态(三种实现方式):

1.简单工厂模式(Simple Factory):不属于23种设计模式之一.简单工厂模式又叫做静态工厂方法模式.简单工厂模式是工厂方法模式的一种特殊实现.

2.工厂方法模式(Factory Method):是23种设计模式之一

3.抽象工厂模式(Abstract Factory):是23种设计模式之一

1.简单工厂模式(又称静态工厂方法模式)

简单工厂模式的角色包括三个

1.抽象产品角色

2.具体产品角色

3.工厂类角色

新建模块 不需要引入依赖

1.抽象产品角色

2.具体产品角色(这里是多个产品)

3.工厂类角色

客户端消费

简单工厂模式的优点:

客户端程序不需要关心对象的创建细节,需要哪个对象时,只需要向工厂索要即可,初步实现了责任的分离.客户端只负责"消费",工厂负责"生产".生产和消费分离

简单工厂模式的缺点:

缺点1:工厂类集中了所有产品的创建逻辑,形成了一个无所不知的全能类,有人把它叫做上帝类.显然工厂类非常关键,不能出问题,一旦出问题,整个系统瘫痪.

缺点2: 不符合OCP开闭原则,在进行系统扩展时,需要修改工厂类(新增产品需要修改工厂类代码).

Spring中的BeanFactory就使用了简单工厂模式.BeanFactory就是SpringIOC容器的老祖宗

2.工厂方法模式(Factory Method):是23种设计模式之一

简单工厂模式中有个缺点:不符合OCP开闭原则,在进行系统扩展时,需要修改工厂类(新增产品需要修改工厂类代码).这个问题在工厂方法模式中可以解决(解决的方式:一个产品对应一个工厂类.......)

新建模块 factory-method

工厂方法模式解决简单工厂模式当中的OCP问题:一个工厂对应生产一种产品.

工厂方法模式中的角色:

抽象产品角色 Weapon

具体产品角色 Dagger Gun

抽象工厂角色 WeaponFactory

具体工厂角色 DaggerFactory GunFactory

抽象产品角色

具体产品角色

抽象工厂角色

具体工厂角色

当我需要扩展的时候

工厂方法模式优点:

当你扩展一个产品的时候,符合OCP原则,因为只需要添加两个类,一个类是具体产品,一个是对应的具体工厂类,都是添加类,没有修改之前的代码,符合OCP.

工厂方法模式缺点:每次增加一个产品,都需要增加一个具体的对象实现工厂,使系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖.不是什么好事.

抽象产品只能生产一种产品,此弊端可以使用抽象工厂模式解决,每次都需要去new

3.抽象工厂模式(Abstract Factory):是23种设计模式之一

相关推荐
黑泽明*13 分钟前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
大模型码小白34 分钟前
AI安全前沿:AI大模型安全防护的前沿技术
java·网络·人工智能·python·深度学习·学习·安全
@卓越俊逸_角立杰出@43 分钟前
java实现Agent+ReAct demo(Spring Boot + Spring AI Alibaba ReAct Agent)
java·spring·react.js
熊猫钓鱼>_>1 小时前
Seedance 2.0 技术深度解析:重构AI视频生成的世界模型新范式
人工智能·笔记·ai·重构·音视频·变革·sedence2.0
天天爱吃肉82181 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
PC2005-cloud1 小时前
Git学习笔记:GitHub Git Data API 完全指南,用 Go 操控 Git 底层对象
笔记·git·学习
依然鸣1 小时前
PTA团体程序设计天梯赛L2真题讲解L2-001-004
经验分享·学习·算法·深度优先·pat考试
一米阳光86611 小时前
软考(中级)软件设计师核心笔记(8)数据结构——图
数据结构·笔记·职场发展·软考·软件设计师·中级职称
不才不才不不才1 小时前
Spring 源码系列(20): @SpringBootApplication 三注解拆解
java·后端·spring
云贝教育-郑老师2 小时前
8.29 杭州线下沙龙|OpenTenBase城市行:当 AI 智能体成为数据库的新生产力
学习·ai·dba