近阶段在研读设计模式,设计模式中最重要的一部分就是设计原则,单独将这一部分拿出来深入探讨和研究
0、开闭原则
修改关闭,拓展开放。
当程序需要变化满足新需求的时,尽量不要在原有基础上修改,而是拓展程序;便于程序的维护、拓展和升级;使用接口和抽象类可以满足这样的需求。
1、单一职责原则
每个类应该实现单一的原则。
如果类包含了多个功能职责,就应该把类进行拆分,避免出现因某一个功能需要修改导致整个类变更情况。我们希望改动的地方影响范围越小越好。
2、里式替换原则(Liskov Substitution Principle LSP)
任意的基类都可以由他的子类来替换。
只有当子类替换基类,且功能不受影响的时候,在子类中可以任意拓展新的行为。基类是与外界进行直接交流的,子类最好不要修改基类方法的结构和定义,因为一旦修改之后,外界可能无法使用。
3、依赖倒转原则
面向接口编程,依赖于抽象而不依赖于具体。
在写代码的时候,尽量与接口或者抽象类进行交互,具体的实现放在子类中;即使有功能变更或者拓展,对使用接口的地方来说也是透明的、无感知的。
4、接口隔离原则(Interface Segregation Principle)
一个类对另一个类的依赖应建立在最小的原则之上。
不应该强迫子类实现他们不需要的方法,如果有,应该把接口进行拆分。多个功能接口合成一个大的接口,不如单个接口单个功能。这里就对应了上面的“单一职责原则”,不同方法混合的接口,是对接口的污染。要保持最小接口。
5、最少知道原则(又叫迪米特法则 Demeter Principle)
只和直接朋友交谈,不要和陌生人说话。(talk only to your immediate friends)
一个类应该对其他的类尽可能少的了解。每个类尽可能减少对其他类的依赖,能够降低类之间的耦合度,使类与类之间不存在或者存在很少的依赖关系。比如A和B认识,B和C认识,如果A想要和C通话,按照迪米特法则,应该由B来充当传话筒,这样就会有很多的非业务方法存在;或者创建一个C的接口父类D,A与接口父类D通信,不和具体实现C通信;也减少了依赖关系。
6、合成复用原则
在一个新的对象里面使用已有对象,使之成为新对象的一部分,新对象通过老对象达到复用的原则。
尽量使用合成/聚合,不要使用继承关系。将已有对象变成新对象的成员对象,新对象不需要知道老方法是如何实现和操作的,即使老对象进行了修改或者拓展也不会对新对象有所影响。新对象可以选择性的使用老对象中的方法,灵活度较高,耦合度也低。