创建模式
- 单例模式
- 饿汉模式
- 懒汉模式
- 双重校验锁模式
- 工厂模式
- 简单工厂
- 建造者模式
原型模式
代理模式
- 实现同一接口,没有接口的使用继承来扩展其他功能。通过委托调用被代理类的方法来增强原有类,可以不侵入原有的代码接口逻辑
- 动态代理
- 业务系统中的一些非功能需求,如监控,日志,限流,幂等,事务,鉴权,统计报表等
- 桥接模式
- 两种理解:一个类中的两个维度独立变化,可以独立开发,随意组合
- 抽象和实现解耦,不是通常的抽象和实现,而是抽象出来的骨架代码,实现是一套独立的类库。
- 组合优于继承
- 举例:根据不同的告警规则(严重,普通,一般),触发不同的告警逻辑(短信,电话,邮件)
- 通俗理解:就是两个或多个维度独立开发,然后通过桥的方式将不同的逻辑糅合在一起。
- 两种理解:一个类中的两个维度独立变化,可以独立开发,随意组合
- 装饰者模式
- 继承被装饰类的父类,对被装饰类的功能做增强
- java的io体系:fileInputStream,bufferInputStream
- 适配器模式
- 提供跟原始类不同的接口,从而对原有的类进行补偿
- 需要使用补救措施的地方
- 封装有缺陷的接口设计
- 统一多个类的接口设计
- 替换依赖的外部系统
- 兼容老版本接口
- 适配不同格式的数据
- 代理,桥接模式,装饰者,适配器本质上都是wrapper类,通过二次封装原始类来达到不同目的。
- 享元模式
- 复用不可变的对象,达到节省内存的目的,可以被多个对象同时共享复用,和缓存,池化技术,单例不同,池化技术主要是为了节省创建时间,同一时间一个对象不可被复用,而享元模式是为了节省空间
- 棋牌游戏的棋子可以做成享元
- 门面模式
- 提供一组高层接口封装子系统的接口,从而对调用者屏蔽掉子系统的细粒度接口,从而达到易用和可复用性的统一
组合模式
观察者模式
- 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,其依赖的对象也相应的发生变化
- 有同步阻塞和异步非阻塞的模式
- 邮件订阅
- 模版模式
- 解决复用和扩展的问题
- 在一个类中定义一个算法骨架,并将某些步骤的实现放到子类中实现
- 复查使用的flux流的形式
- 策略模式
- 解决使用大量的if else语句判断的问题。定义一系列算法,将他们封装起来成为一个个策略
- 责任链模式
- 多个处理器依次处理同一个请求
- 状态模式
- 状态机的一种实现方式,有状态,事件,动作三要素。
- 迭代器模式
- 需要有hasNext(),next(),currentItem()三个方法,遍历集合
- 访问者模式
- 允许一个或多个操作应用在一组对象上,为了防止操作和对象的不断膨胀,所以将操作和对象解耦开
- 备忘录模式
- 不违背封装原则的前提下,对一个对象的内部状态进行备份
- 命令模式
- 将函数封装成对象
- 解释模式
- 为某个语言定义他的语法表示,并定义一个解释器来处理这个语法
- 中介模式
- 定义一个中介,将一组对象间的交互关系从多对多转成一对多