原则1:针对接口编程,而不是针对实现编程
客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。
原则2:优先使用对象组合,而不是类继承
类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
原则3:封装变化点
使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。
具体表现为:
1.单一职责原则(SRP):一个类应该仅有一个引起它变化的原因。
2.开闭原则(OCP):一个软件实体应当对扩展开放,对修改关闭。
3.里氏代换原则(LSP):子类型必须能够替换它们的基类型。反过来的代换不成立。
4.依赖倒置原则(DIP):具体要依赖于抽象,抽象不要依赖于具体。
5.接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口总要好。
6.迪米特法则(Law of Demeter,LoD):又叫最少知识原则(Least Knowledge Principle,LKP),即一个对象应当对其它对象有尽可能少的了解。