[学习日记] - 理解面向对象设计8个原则

132 阅读1分钟

1. 依赖倒置原则 (DIP)

  • 上层模块不能依赖于下层模块的实现, 二者都应该要依赖于抽象.
  • 抽象不应该依赖于实现细节, 实现细节应该依赖于抽象.
  • 当下层模块产生变化时, 上层模块无需改变.

2. 开放封闭原则 (OCP)

  • 对扩展开放, 对修改封闭.
  • 类模块应该是可扩展的, 但是不可以修改
    • 修复缺陷和客户端无法感知的除外.

3. 单一职责原则 (SRP)

  • 一个类只做一个事情.
  • 一个类应该只有一个引起它变化的原因.

4. 里氏替换原则 (LSP)

  • 子类是抽象继承而不是具体继承. (is-a)
    • 具体继承是为了代码重用除外.
    • 具体继承是为了代码扩展除外.

5. 接口隔离原则 (ISP)

  • 不应该强迫类依赖它们不用的方法.
  • 接口应该小而完备.

6. 合成复用原则 (CRP)

  • 优先使用对象组合, 而不是类继承. (has-a)
  • 继承在某种程度破坏了封装性, 子类和父类耦合度高.
  • 对象组合只需要被组合对象提供一个良好定义的接口.

7. 封装变化点

  • 使用封装来创建对象直接的分界层, 让设计者可以在分界层的一侧进行修改, 而不会导致另一侧的不良影响, 从而实现层次间的松耦合

8. 针对接口编程

  • 不将变量声明为某个特定的具体类, 而是声明为某个接口.
  • 客户程序无需知道对象的具体类型, 只需要知道对象所具有的接口.