一、创建型模式
1、单例模式
保证一个对象,所有获取到该类型的对象都是一个。如 Spring 框架的单例模式。
2、原型模式
克隆出多个对象,获取该类型的对象通过克隆创建。如 Spring 框架的原型模式。
3、工厂方法模式
- 简单工厂模式:通过 if-else 来创建对象。
- 工厂方法模式:通过特定方法来创建对象。
如线程池可通过线程池工厂 Executors 的各种方法来创建各种类型的线程池。
4、抽象工厂模式
通过工厂模式创建工厂,通过创建出的工厂创建对象。
5、建造者模式
通过 XxxBuilder 来构建对象。如 StringBuilder 通过 append() 方法来追加字符序列,最后通过 toString() 方法来获取 String 对象。
二、结构型模式
1、适配器模式
将一个接口的对象通过适配器类转换为另一个接口的对象。如 InputStreamReader 适配器类将 InputStream 接口转换为 Reader 接口。
2、桥接模式
桥接模式的出现是为了减少类的维度,如果某个属性增加了类的数量(维度),我们就将这个属性抽象出来。如 JDBC 中的 Driver 接口就是一个桥接接口,不同的数据库厂商需要提供实现这个接口的类,并通过 DriverManager 类将自己实现的对象注入进去。
3、动态代理模式
动态代理模式的出现是为了在不改变原有代码的情况下增强被代理类。如 Spring AOP 底层的实现原理利用到了 JDK 动态代理和 cglib 动态代理。
4、装饰器模式
为了增强被装饰类,装饰类维护被装饰类引用。如 Mybatis 中二级缓存和一级缓存的逻辑就是用到了装饰器模式,先走二级缓存,二级缓存不存在再走一级缓存。
5、外观、门面模式
把多个类的多个方法合并到一个类中。比如我们常用的 MVC 模式,在 Service 层通常要调用许多 DAO 层的方法。
6、享元模式
将对象用池技术共享。如字符串常量池、线程池等。
7、组合模式
一个类维护另一个类的引用。经常见到。
三、行为型模式
1、模板方法模式
父类定义具体步骤的顺序而不定义具体步骤,具体步骤由子类去完成。如 Spring 框架提供的 RestfulTemplate 和 StringRedisTemplate。
2、策略模式
被调用者执行的逻辑由调用者来决定。如线程池的拒绝策略就是当作参数传入。
3、责任链模式
处理者维护下一个处理者的指针,处理完毕后交给下一个处理者处理。如 Servlet 的 Filter。
4、观察者模式
被观察者维护一个观察者列表,通过 foreach 调用被观察者的方法。比如 Spring 的事务监听器就是通过遍历所有观察者并调用相应方法来实现的。
5、中介者模式
将网状关系转换为星型关系,星型的中点就是中介者类。比如 SpringMVC 的 DispatcherServlet 就是使用了中介者模式,Controller 与 View 的对应关系就是由它来维护的。
6、迭代器模式
通过迭代器来遍历集合。比如实现了 Iterator 接口的实现类 Collection 就通过迭代器来遍历。
7、备忘录模式
发起人将自己的信息保存到一个备忘录对象中,并添加到管理者备忘录集合中,相当于一个快照(序列化到文件中)。如Session的活化钝化可以使用备忘录模式,讲当前Session信息序列化保存起来,开机后自动获取。
8、解释器模式
将未解释的内容通过解释器模式解释成解释后的内容。比如 JDK 源码中 InputStreamReader 中的解码器一次接收多个字节,将字节解码后保存到char中。