设计模式

一、设计原则

  • 单一职责:一个类负责一类功能
  • 开闭原则:对扩展开放,对修改封闭
  • 里氏代换原则:所有使用父类的地方,都可以使用子类替换
  • 依赖倒转:具体依赖抽象。两个关联的东西,都应该在外层有一个抽象封装,这样只需要修改内部实现,不影响关联。针对接口编程
  • 接口隔离原则:一个接口负责一个功能
  • 合成复用原则:少用继承,多用组合或聚合。继承破坏父类的封装、父类子类的耦合高
  • 迪米特法则:最少知道法则,一个类只和直接关联类(成员变量,方法入参出参)打交道、减少一个类的公有方法隐藏自己

二、分类

  • 创建型:工厂、抽象工厂、单例、原型、创建者
  • 接口型:装饰者、代理、外观
  • 行为型:模板方法、策略

三、举例

  1. 单例
    1. 实现:恶汉、懒汉+双重检查+volitail、静态内部类(内部类的延迟加载)、枚举
    2. 破坏:反射调构造方法、序列化(改写readResolv返回原实例)、克隆(改写clone方法返回原实例)
  2. 原型
    1. 实现:浅拷贝(实现Cloneable接口)、深拷贝(类和属性需要实现Serializable接口)
  3. 模板
    1. 应用:父类定义一个方法的具体流程,第一步第二步第三步、子类自定义实现。订单列表:XX公司员工/普通用户
  4. 构建者
    1. 应用:@Builder,当属性很多时,不需要写很多构造器,很方便的时候set方法
  5. 策略
    1. 应用:将父类/接口定义方法入参,传递入参时使用不同实现
  6. 装饰器
    1. 实现:装饰器类实现目标接口,内部持有原接口对象,在改写的方法里添加自己的逻辑,再调用原实现。
  7. 简单工厂
    1. 实现:在工厂内部,根据入参使用if else返回不同实例。一个简单工厂生成多个实例
  8. 工厂模式
    1. 实现:一个工厂生成一种实例
  9. 抽象工厂
    1. 实现:一个工厂生成一组关联实例,并在内部完成组装
    2. 应用:比如车,汽车抽象工厂(方向盘,沙发,轮子),自行车抽象工厂(座椅,轮子)
  10. 代理
    1. 应用:springAOP
  11. 外观:
    1. 应用:订单列表接口查询多个核心系统
人生就像蒲公英,看似自由,其实身不由己。
原文地址:https://www.cnblogs.com/walker993/p/14913413.html