依赖倒置原则(DIP):
关键词:面向接口编程
定义:
高层模块不应该依赖低层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。
比如我们的抽象类、接口、协议都是广义上的抽象。
servlet容器协议:tomcat、jetty、weblogic、jboss等
分工高度明确的现代社会更是如此:比如我们的220v电压标准,所有在中国销售的家电都实现了这个协议,我家的电饭煲在你家也能用
作用:
- 可以降低类之间的耦合性
- 可以提高系统的稳定性
- 可以减少并行开放引起的风险,在多人开发的时候,如果没有接口或者抽象类,那并行开发的效率可想而知
- 可以提高代码的可读性和可维护性。
最佳实践:
- 每个类都尽量地有接口或者抽象类,或者两者俱备。抽象是依赖倒置的基本要求
- 变量的表面类型尽量是接口或者抽象类
- 任何类都尽量不要从具体类派生,如果一个类从具体类派生,那么这个类和它依赖的非抽象父类就形成强耦合
- 尽量不要覆写基类的方法。如果基类是个抽象类,而且这个方法已经实现了,子类尽量不要覆写。类间的依赖是抽象,覆写了抽象方法,会影响依赖的稳定性。
- 结合里氏替换原则使用