目录
SOLID不是一个原则的名字,而是SRP、OCP、LSP、ISP、DIP5个准则的缩写,接下来将简要讲述这5个准则的含义以及如何在开发中维护准则。
一、SRP(单一责任原则)
一个类只能做一件事情,不应该有多于一个变化使ADT被修改。若ADT承担了多个责任,那么应该将这个ADT拆分。
一个类如果承担了多个责任,引入额外的包,占据资源,导致频繁的重新配置、部署等,还有让后续的维护和拓展变困难。
一个反例:
二、OCP(开放/封闭原则)
开放指的是面对扩展的开放,模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化。
封闭是面对修改的封闭,虽然要拓展,但是不应该修改原代码本身,扩展模块行为的一般途径是修改模块的内部实现。
关键的解决方案是抽象技术:继承和委派。
反例:
原先要使用不同的Server必须修改Server内方法,而使用接口或者抽象类后,可以通过继承接口或抽象类构造新的子类实现扩展。
也可以参照Strategy、Visitor等设计模式,看到通过委派拓展功能而不改变ADT本身。
三、LSP(Liskov替换原则)
简单来说就是子类型必须可以替换原类型,派生类必须能够通过其基类的接口使用,客户端无需了解二者之间的差异。
想要具体实现该原则,需要保证如下几点:
对于ADT来说:
1.子类型可以增加方法,但是不可以删。
2.子类型不可以修改父类型的不变量。
3.子类型需要实现父类型的抽象方法。
4.子类型重写的方法必须要有相同的返回值,或者是满足协变的返回值。
5.子类型重写的方法必须使用相同的参数,或者满足抗变的参数。
6.子类型重写的方法不可以抛出更多的异常,只能抛出父类异常的子类异常或者不抛出。
对于ADT内的方法来说:
1.需要有更强的不变量。
2.需要更弱的前置条件。
3.需要更强的后置条件。
四、ISP(接口隔离原则)
五、DIP(依赖转置原则)