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种设计模式之一

相关推荐
_Kayo_1 小时前
node.js 学习笔记3 HTTP
笔记·学习
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
CCCC13101634 小时前
嵌入式学习(day 28)线程
jvm·学习
甄超锋4 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
星星火柴9365 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头5 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑6 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA7 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Cx330❀7 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.7 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习