目录与学习目标

  1. 1:创建型的设计模式:单例模式 工厂模式
  2. 2:结构型的设计模式:代理模式 装饰器模式
  3. 3:行为型的设计模式:模板模式 观察者模式 策略模式

1:创建型的设计模式介绍

  1. 单例模式:
  2. 创建一个单例对象 避免重复创建对象而导致的资源浪费
  3. 工厂模式:
  4. 主要分简单工厂 工厂方法 抽象工厂
  5. 其中抽象工厂了解即可:实际上是一个类中创建多类对象
  6. 简单工厂:把创建对象的逻辑抽取出来 形成一个真正生产对象的工厂类 (或工厂方法)
  7. 工厂方法: 使用内外部工厂的结构 外部工厂生产内部工厂 内部工厂真正的生产对象
  8. 可以使用Map集合容器来存储创建好的 有状态 或者 无状态的对象

2:结构型的设计模式介绍

  1. 代理模式:
  2. 静态代理 动态代理
  3. 静态代理 A 调用 B的方式时 先经过B的代理类的方法 通过代理类的方法做增强 (每一个方法都需要代理)
  4. 动态代理 利用反射完成AOP思想 在实现接口的实现类中 直接代理所有方法 在所有方法前后做增强 (自动代理所有的方法)
  5. 装饰器模式:
  6. 装饰器类与普通类 一起继承抽象类或者实现父接口类
  7. 因此装饰器利用了组合的方法 可以使用多个装饰器组合在一起 对某个类的某个方法 做各种增强
  8. 装饰器类里面的方法名 普通类的方法名一致 并且调用普通方法 在调用前后实现了增强
  9. 注意:
  10. 代理和装饰器的区别
  11. 1:代理通常是 使用反射的方法 增强所有方法 并且 增强前后与本身方法没有太大关联(打印日志)
  12. 2:装饰器通常是 使用类组合的方法 增强单个方法 并且 增强前后与本身方法有太大关联 (支付时积分抵扣)

3:行为型的设计模式介绍

  1. 模板模式:
  2. 使用抽象类做为模板 抽象类中用使用final修饰的方法 去顺序调用本抽象类的其他方法
  3. 实现类继承了该抽象类的模板就需要 按照该模板来执行相应的逻辑 做到了代码规范流程的作用
  4. 观察者模式:
  5. 实际上观察者模式就是发布订阅模式 一个发布者 多个订阅者 类似于消息框架 或者 spring的监听器
  6. 发布者具有注册订阅者功能 使用Map集合容器存储订阅者的信息 当发布者发布信息对容器中的订阅发送消息即可
  7. 策略模式:
  8. 策略模式 主要是用来做策略(逻辑)的选择 同时避免大量的if-else判断
  9. 主要通过方法:
  10. 1:可以使用枚举来获取对应的 策略类型
  11. 2:可以使用枚举来获取对应的 策略对象
  12. 3:可以使用Map集合容器来存储策略对象 根据策略类型获取Map集合容器的策略对象
  13. 最终达到:完全避免了if-else 就能 使用 有状态或者无状态 的策略对象并执行对应逻辑

项目连接

  1. 请配合项目代码食用效果更佳:
  2. 项目地址:
  3. https://github.com/hesuijin/hesujin-design-pattern
  4. Git下载地址:
  5. https://github.com.cnpmjs.org/hesuijin/hesujin-design-pattern.git