依赖倒置原则
定义:
a. 高层模块不应该依赖于低层模块。二者都应该依赖于抽象。
b. 抽象不应该依赖于细节。细节应该依赖于抽象。
抽象:就是指接口或者抽象类。
细节:实现类,可以被new出来的类。
为什么要遵守依赖倒置原则?
正是高层模块包含了应用程序中重要的策略选择和业务模型。这些高层模块使得其所在的应用程序区别于其它。然而,如果这些高层模块依赖于低层模块,那么对低层模块的改动就会直接影响到高层模块,从而迫使它们依次作出改动。
本应该是高层的策略设置模块去影响低层的细节实现模块的。 包含高层业务规则的模块应该优先并独立于包含实现细节的模块。无论如何高层模块都不应该依赖于低层模块。
此外,我们更希望能够重用的是高层的策略设置模块。我们已经非常擅长于通过之程序库的形式来重用低层模块。如果高层模块独立于依赖低层模块,那么在不通的上下文中重用高层模块就会变得非常困难。然而,如果高层模块独立于低层模块,那么高层模块就可以非常容易地被重用。该原则是框架设计的核心原则。
规则:
依赖倒置原则的本质就是通过抽象(抽象类或者接口)使各个类或模块的实现彼此独立,不互相影响,实现模块见的松耦合,如果需要使用该规则,需要遵循以下几个规则:
1、每个类尽量都有接口或者抽象类,或者抽象类和接口两者都具备(这个是该原则的基本要求,接口和抽象类都是抽象,有了抽象才可能依赖倒置);
2、变量的表面类型尽量是接口或者抽象类;
3、任何类都不应该从具体类派生;
4、尽量不要覆写基类的方法(如果基类是一个抽象类,并且该方法已经实现了,子类尽量不要覆写。类间依赖的是抽象,覆写了抽象方法,对依赖的稳定性会产生一定的影响);
5、结合里氏替换法使用;
这个原则对于那些虽然具体但是却稳定的类来说似乎并不是很合适, 如果一个类不太会改变, 而且也不太可能创建其他的派生类,那么依赖它似乎并没有太大的危害。比如String类。
原文链接:https://www.f2er.com/javaschema/286996.html