
引言
>设计模式就是把变化封装起来,让代码对扩展开放、对修改关闭。
文章目录
[1.1 饿汉式单例](#1.1 饿汉式单例)
[1.2 懒汉式单例](#1.2 懒汉式单例)
[1.3 静态内部类](#1.3 静态内部类)
[1.4 枚举](#1.4 枚举)
[1.5 Bean注册](#1.5 Bean注册)
[2.1 简单工厂](#2.1 简单工厂)
[2.2 工厂方法模式](#2.2 工厂方法模式)
[2.3 抽象工厂](#2.3 抽象工厂)
[2.4 最佳实践](#2.4 最佳实践)
[4.1 链式实现](#4.1 链式实现)
[4.2 最佳实践](#4.2 最佳实践)
[6.1 观察实现](#6.1 观察实现)
[6.2 最佳实践](#6.2 最佳实践)
[9.1 JDK动态代理](#9.1 JDK动态代理)
[9.2 CGLIB动态代理](#9.2 CGLIB动态代理)
一、单例模式
场景:全局唯一实例,无状态工具类,配置持有者
1.1 饿汉式单例

1.2 懒汉式单例

DCL机制

1.3 静态内部类

1.4 枚举

1.5 Bean注册

二、工厂模式
2.1 简单工厂

2.2 工厂方法模式



2.3 抽象工厂
抽象工厂就是将多个产品组合在一起的集合。
功能接口:


不同功能接口实现:




工厂组合接口:

不同工厂接口实现:


2.4 最佳实践
策略接口:

不同策略实现:


使用List或Map都会自动装配,如果是Map的情况,key值为beanName。

三、模板模式
场景:多个步骤流程一致,但是某些步骤的实现不同


四、责任链模式
场景:一个请求需要经过多个处理器,并且顺序可能调整
4.1 链式实现

核心就在抽象类本身持有自己的类型




在使用时执行顺序关系

4.2 最佳实践


通过@Order注解实现顺序




五、适配器模式
场景:兼容老接口或三方接口

sendSms内调用的方法名和入参均不相同,可能返回的结果都各不相同



六、观察者模式
场景:事件驱动,解耦生产和消费
6.1 观察实现
生产者核心通过List存储遍历给消费者


消费者



6.2 最佳实践
source通常指向生产者(事件来源),user就是要发送的数据


消费者异步处理


七、建筑者模式
通常使用@Builder注解即可,一般用于子类中

八、装饰器模式
场景:动态增强功能,而不改变原类






基本使用

九、代理模式
9.1 JDK动态代理
静态代理就是新建一个代理类,注入原始类对象,实现原始类接口时执行扩展方法和对象方法,一般不会用到。
jdk代理需要原始对象实现接口

9.2 CGLIB动态代理


