创建模式

  1. 单例模式
    1. 饿汉模式
    2. 懒汉模式
    3. 双重校验锁模式
  2. 工厂模式
    1. 简单工厂
  3. 建造者模式
  4. 原型模式

    1. 深拷贝浅拷贝

      结构型设计模式

  5. 代理模式

    1. 实现同一接口,没有接口的使用继承来扩展其他功能。通过委托调用被代理类的方法来增强原有类,可以不侵入原有的代码接口逻辑
    2. 动态代理
    3. 业务系统中的一些非功能需求,如监控,日志,限流,幂等,事务,鉴权,统计报表等
  6. 桥接模式
    1. 两种理解:一个类中的两个维度独立变化,可以独立开发,随意组合
      1. 抽象和实现解耦,不是通常的抽象和实现,而是抽象出来的骨架代码,实现是一套独立的类库。
      2. 组合优于继承
    2. 举例:根据不同的告警规则(严重,普通,一般),触发不同的告警逻辑(短信,电话,邮件)
    3. 通俗理解:就是两个或多个维度独立开发,然后通过桥的方式将不同的逻辑糅合在一起。
  7. 装饰者模式
    1. 继承被装饰类的父类,对被装饰类的功能做增强
    2. java的io体系:fileInputStream,bufferInputStream
  8. 适配器模式
    1. 提供跟原始类不同的接口,从而对原有的类进行补偿
    2. 需要使用补救措施的地方
      1. 封装有缺陷的接口设计
      2. 统一多个类的接口设计
      3. 替换依赖的外部系统
      4. 兼容老版本接口
      5. 适配不同格式的数据
    3. 代理,桥接模式,装饰者,适配器本质上都是wrapper类,通过二次封装原始类来达到不同目的。
  9. 享元模式
    1. 复用不可变的对象,达到节省内存的目的,可以被多个对象同时共享复用,和缓存,池化技术,单例不同,池化技术主要是为了节省创建时间,同一时间一个对象不可被复用,而享元模式是为了节省空间
    2. 棋牌游戏的棋子可以做成享元
  10. 门面模式
    1. 提供一组高层接口封装子系统的接口,从而对调用者屏蔽掉子系统的细粒度接口,从而达到易用和可复用性的统一
  11. 组合模式

    1. 对于一组对象可以组织成树状模式,并且可以通过树的遍历来实现相应的逻辑
    2. 目录和文件,部门和员工隶属关系

      行为型设计模式

  12. 观察者模式

    1. 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,其依赖的对象也相应的发生变化
    2. 有同步阻塞和异步非阻塞的模式
    3. 邮件订阅
  13. 模版模式
    1. 解决复用和扩展的问题
    2. 在一个类中定义一个算法骨架,并将某些步骤的实现放到子类中实现
    3. 复查使用的flux流的形式
  14. 策略模式
    1. 解决使用大量的if else语句判断的问题。定义一系列算法,将他们封装起来成为一个个策略
  15. 责任链模式
    1. 多个处理器依次处理同一个请求
  16. 状态模式
    1. 状态机的一种实现方式,有状态,事件,动作三要素。
  17. 迭代器模式
    1. 需要有hasNext(),next(),currentItem()三个方法,遍历集合
  18. 访问者模式
    1. 允许一个或多个操作应用在一组对象上,为了防止操作和对象的不断膨胀,所以将操作和对象解耦开
  19. 备忘录模式
    1. 不违背封装原则的前提下,对一个对象的内部状态进行备份
  20. 命令模式
    1. 将函数封装成对象
  21. 解释模式
    1. 为某个语言定义他的语法表示,并定义一个解释器来处理这个语法
  22. 中介模式
    1. 定义一个中介,将一组对象间的交互关系从多对多转成一对多