原则目的:高内聚,低耦合,隔离变化

  1. 依赖倒置原则 Dependence Inversion Principal(DIP)
    • 依赖于抽象(接口),不要依赖具体的实现(类)
    • 针对接口编程
  2. 开闭原则 Open-Closed Principal(OCP)
    • 对扩展开放,对修改关闭
    • 类的改动是通过增加代码进行的,而不是修改源代码
  3. 单一职责原则 Single Responsibility Principal(SRP)
    • 类的职责单一,对外只提供一种功能
    • 一个类应该仅有一个引起它变化的原因
    • 变化的方向隐含着类的责任
  4. 里氏代换原则 Liskov Substitution Principal(LSP)
    • 任何抽象类出现的地方都可以用他的实现类进行替换(多态)
    • 子类必须能够替换它们的基类(IS-A)
    • 继承表达类型抽象。
  5. 接口隔离原则 Interface Segregation Principal(ISP)
    • 不应该强迫客户程序依赖他们不用的方法
    • 接口应该小而完备
    • 一个接口应该只提供一种对外功能,不应该把所有操作都封装到一个接口中去
  6. 合成复用原则 Composite Reuse Principal(CRP)
    • 对于继承和组合,优先使用组合
    • 类继承通常为 白箱复用,对象组合通常为 黑箱复用
    • 继承在某种程度上破坏了封装性,子类父类耦合度高
    • 而对象组合则只要求被组合的对象具有良好定义的接口,耦合度高
  7. 迪米特法则 Law of Demeter(LoD)
    • 一个对象应当对其他对象尽可能少的了解(最小接口原则),从而降低各个对象之间的耦合。例如在一个程序中,各个模块之间相互调用时,通常会提供一个统一的接口来实现。这样其他模块不需要了解另外一个模块的内部实现细节(黑盒原理)
    • 封装变化点,使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合
  8. 针对接口编程,而不是针对实现编程
    • 不将变量类型声明为某个特定的具体类,而是声明为某个接口
    • 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口
    • 减少系统中各部分的依赖关系,从而实现 高内聚、松耦合 的类型设计方案