设计模式

117 阅读2分钟

设计模式

why: 为了在编译单元层面复用代码,隔离变化部分。

what: 设计模式是解决某类问题的模板。

principle:

  1. 依赖倒置(DIP):

    1.1. 高层(稳定)、底层(变化)都依赖于抽象(稳定)

    1.2. 实现细节依赖于抽象

  2. 开闭原则(OCP):

    2.1. 对扩展开放、对修改封闭,这样不用重新编译测试部署

    2.2. 变化发生后就通过抽象来隔离同类变化

  3. 单一职责(SRP):

    3.1 变化方向隐含着类的责任(识别变化点,确保这个方向的变化不可能发生)

    3.2 一个类只有一个引起变化的原因

  4. 接口隔离原则(ISP)

    5.1 不要强迫客户程序依赖他们不用的接口,接口要小而完备

    5.2 尽量把接口private、protected

  5. 里式替换准则(LSP)

    5.1 子类可以替换父类(IS-A)

    5.2 父类包含了子类的实现细节,会导致无法替换

  6. 迪米特法则(LOD)

    6.1 只和朋友通信

    6.2 朋友就是类成员、接口参数,不允许直接在方法体中使用其他对象

  7. 封装

    7.1 封装方法和数据

    7.2 封装变化点

  8. 优先使用对象组合、而不是类继承

how:

  1. 使用重构持续改善设计。
  2. 识别变化和稳定点,问自己变化点是什么,然后通过组合抽象基类的指针去隔离变化。
  3. 关注依赖关系,不要依赖不稳定部分,关注接口是否不变
  4. 继承转组合、早绑定转晚绑定
  5. 通过提取公共部分(抽象基类)、组合抽象基类来消除重复;通过对条件语句抽象来消除if-else

when:

  1. 对需求了解很浅(无法分辨有没有复用性)的时候不用
  2. 代码可读性很差的时候不用
  3. 需要高性能的时候评估使用

其他:

  1. 属性和操作常常分离,接口依赖属性,操作依赖接口。(需要一个实例)