GoF23设计模式

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

推荐阅读

精品文章(小黄书):https://mp.weixin.qq.com/s/lzsngaSvIjxJaD72cRkYgQ
小哈学java:https://mp.weixin.qq.com/s/m3u6NGQq_bwdtOZfZvnOiQ

这两篇文章写的非常之好。下面文章不定期更新中。。。

一、创建型(总结:为了不用new)(5种)

1、工厂模式

实现了创建者和调用者的分离。
实例化对象不使用new,使用工厂方法代替;将选择实现类,创建对象统一管理和控制;从而将调用者跟我们的实现类解耦。

简单工厂模式(静态工厂)(不在23种里面):用来生成同一等级结构中的任意产品(对于增加新的产品需要覆盖已有代码)。其实不符合设计原则,但是使用很多。
在这里插入图片描述

工厂方法模式:用来生成同一等级结构中的固定产品(支持增加任意产品)。不使用已有类的情况下,通过增加新的工厂类来实现扩展。
(总结:不用new用工厂)
在这里插入图片描述
在这里插入图片描述

抽象工厂模式:围绕一个超级工厂创建其他工厂, 该超级工厂又称为其他工厂的工厂。不可以增加产品(消费者不接触产品,只接触工厂),可以增加产品族(增加一个产品族几乎所有子类都要改,适合不经常增加的,比如小米华为手机路由器,增加个笔记本)
(总结:工厂的工厂)
IPhoneProduct产品
在这里插入图片描述
IRouterProduct产品
在这里插入图片描述
IProdcutFactory超级工厂

在这里插入图片描述

超级工厂创建XiaomiFactory工厂
在这里插入图片描述
使用
在这里插入图片描述

类图
在这里插入图片描述
小米华为产品族
在这里插入图片描述

应用场景:
JDK中的Calendar的getInstance方法;JDBC的getConnection的获取;Spring中IOC容器创建管理Bean对象;反射中Calss对象的newInstance方法;

2、单例

一个类在整个运行过程中有且仅有一个。例如:工厂本身,配置文件,日历,IOC容器
(总结:为了创建only一个对象)

// 饿汉式:(先new)
private  static final Hungry hungry = 
new Hungry();
private Hungry(){};
public static Hungry getInstance(){
    return hungry;
} // 无线程安全问题

// 懒汉式:(用到的时候才new)(延时加载)
private  static final Hungry hungry = 
null;
private Hungry(){};
public static Hungry getInstance(){
    if (hungry == null) {
       hungry = new Hungry();
    }
    return hungry;
}

3、创建者模式

将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示;在用户不知道对象的创建过程和细节的情况下就可以直接创建复杂的对象。
(总结:为了创建复杂对象)

定义:
在这里插入图片描述
产品房子
在这里插入图片描述
抽象的建造者和具体的建造者
在这里插入图片描述
指挥
在这里插入图片描述
使用
在这里插入图片描述
建造者和抽象工厂模式的对比
在这里插入图片描述

4、原型模式

po复制到Dto或者Vo中
(总结:不用new用克隆,尤其复杂对象)
浅克隆深克隆
在这里插入图片描述
使用
在这里插入图片描述

二、结构型(总结:为了松耦合)(7种)

1、适配器模式

适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原来由于接口不兼容无法一起工作的类能一起工作。
应用场景:SpringMVC中的HandlerAdapter; InputStreamReader(inputStream);GUI编程中存在大量适配器
网线
在这里插入图片描述
电脑/使用
在这里插入图片描述
适配器接口
在这里插入图片描述
适配器
在这里插入图片描述
定义
在这里插入图片描述

2、桥接模式

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化;抽象和实现耦合在一起的时候,先抽成两个维度,x轴y轴,一个维度成为产品的属性,另一个维度继承产品,这个产品就将两个维度桥接起来了。
应用场景:java语音通过JVM实现了平台的无关性(jvm版本代码和操作系统win和mac等桥接);AWT中的peer架构(一个图标在GUI编程中 在 不同操作系统中位置不一样);JDBC驱动程序(驱动接口可以连接不同数据库驱动);
定义
在这里插入图片描述
桥接改变复杂继承设计
在这里插入图片描述
品牌接口
在这里插入图片描述
联想品牌
在这里插入图片描述
类型/桥
在这里插入图片描述
使用
在这里插入图片描述

概念
在这里插入图片描述
场景
在这里插入图片描述

3、代理模式

代理模式:(Spring的AOP)
动态代理的类是动态生成的,不是程序员写好的。动态代理分为两大类,基于接口的,基于类的。
基于接口:JDK的动态代理(Spring默认)(通过实现implement InvocationHandler这个接口的类,来生成代理类进而处理新增加的业务而不改变原有的UserServiceImpl代码,如上面Spring的AOP进化史三)
基于类:cglib(通过extends UserServiceImpl,继承类似这种具体业务实现类,进而处理新增加的业务而不改变原有的UserServiceImpl代码)
java字节码实现:javasist (针对于Jboss的,我们用的tomcat)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝影铁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值