依赖倒置:要依赖抽象,不要依赖具体类。
“倒置”的含义:
如果依赖于具体类去设计。那么画出来的图,高层组件在上面,底层组件在下面,高层组件依赖于底层组件。p138。
如果依赖抽象,例如使用工厂方法后,高层组件依赖于抽象类,底层组件也依赖于抽象类,有一部分箭头就被倒置了,高层组件不再依赖底层组件,而两者都依赖于抽象。
一些方针可以帮助避免在OO设计中违反依赖倒置原则:
- 变量不可以持有具体类的引用(使用new会持有具体类的引用。可以使用工厂来避开)
- 不要让类派生自具体类(派生自具体类,会依赖具体类,派生自一个抽象)
- 不要覆盖基类中已实现的方法(如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的对象。基类中已实现的方法,应该由所有的子类共享)
注意:应该尽量达到这个原则,而不是随时都要遵循这个原则。如果深入体验这些方针,将这些方针内化成你思考的一部分,那么在设计时,你将知道何时有足够的理由违反这样的原则。