设计模式6大原则之依赖倒置原则

依赖倒置原则

定义:

a. 高层模块不应该依赖于低层模块。二者都应该依赖于抽象。

b. 抽象不应该依赖于细节。细节应该依赖于抽象。

抽象:就是指接口或者抽象类。

细节:实现类,可以被new出来的类。

为什么要遵守依赖倒置原则?

正是高层模块包含了应用程序中重要的策略选择和业务模型。这些高层模块使得其所在的应用程序区别于其它。然而,如果这些高层模块依赖于低层模块,那么对低层模块的改动就会直接影响到高层模块,从而迫使它们依次作出改动。

本应该是高层的策略设置模块去影响低层的细节实现模块的。 包含高层业务规则的模块应该优先并独立于包含实现细节的模块。无论如何高层模块都不应该依赖于低层模块。

此外,我们更希望能够重用的是高层的策略设置模块。我们已经非常擅长于通过之程序库的形式来重用低层模块。如果高层模块独立于依赖低层模块,那么在不通的上下文中重用高层模块就会变得非常困难。然而,如果高层模块独立于低层模块,那么高层模块就可以非常容易地被重用。该原则是框架设计的核心原则。

规则:

依赖倒置原则的本质就是通过抽象(抽象类或者接口)使各个类或模块的实现彼此独立,不互相影响,实现模块见的松耦合,如果需要使用该规则,需要遵循以下几个规则:

1、每个类尽量都有接口或者抽象类,或者抽象类和接口两者都具备(这个是该原则的基本要求,接口和抽象类都是抽象,有了抽象才可能依赖倒置);

2、变量的表面类型尽量是接口或者抽象类;

3、任何类都不应该从具体类派生;

4、尽量不要覆写基类的方法(如果基类是一个抽象类,并且该方法已经实现了,子类尽量不要覆写。类间依赖的是抽象,覆写了抽象方法,对依赖的稳定性会产生一定的影响);

5、结合里氏替换法使用;

这个原则对于那些虽然具体但是却稳定的类来说似乎并不是很合适, 如果一个类不太会改变, 而且也不太可能创建其他的派生类,那么依赖它似乎并没有太大的危害。比如String类。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...