什么是依赖倒置原则?
定义:高层模块不应该依赖于低层模块,两者都应依赖于抽象。抽象不应该依赖细节,细节应依赖于抽象。
依赖倒置原则的主要思想是要面向接口编程,不要面向具体实现编程。
依赖倒置原则的优点?
软件开发过程,需求变动是必然会出现的,这时候健壮稳定的代码就至关重要。从代码架构上来看,抽象层相对稳定,因此由抽象层为基础搭建的工程架构会比由具体实现为基础搭建的工程架构稳定得多。而依赖倒置原则正是提倡这种由抽象层为基础搭建的工程架构,遵守依赖倒置原则具有以下优点:
- 降低类间的耦合性。
- 提高系统的稳定性。
- 降低并行开发引起的风险。
为什么要遵守依赖倒置原则?
我们将通过多个例子来讲述为何我们要遵守依赖倒置原则。
在战斗中,士兵们都会使用枪械等兵器,所以也以此举例,实现个士兵使用手枪射击的程序。
我们可以看到上面程序正常运行,符合预期的要求!但是代码写得好不好,还需要重重新需求的考验才能见证。
现在由于手枪射程短,杀伤力不足,要新增士兵使用步枪的功能。于是写下新增以下步枪类:
现在我们再来看代码,发现士兵类的 useGun 方法与手枪类紧密耦合关系,导致士兵类的 useGun 方法无法使用步枪类,程序编译就失败了,这与我们的设计预期不符合,代码设计的是有问题的。依赖倒置原则告诉我们高层模块不应该依赖于低层模块,两者都应依赖于抽象。士兵类是一个高层模块,手枪类和步枪类是底层模块,两者不应该强耦合,稳定性不好,不利于功能后续拓展开发。
以上就是依赖倒置原则关于降低类间的耦合性,提高系统的稳定性的作用。那为什么说依赖倒置原则有降低并行开发引起的风险的作用呢?
我们都知道士兵要会使用手枪和步枪等枪支,必须要等枪支具体生产出来,拿到手后才能学习使用。所以这里就有个先后关系,从代码设计角度来看,士兵类开发人员 A 必须等枪支类开发人员 B 具体设计出枪支类后才能后续开发。这显然是不好的,不利于并发开发的速度。依赖倒置原则说 抽象不应该依赖细节,细节应依赖于抽象。根据细节依赖于抽象,我们将代码重新调整成如下代码:
至此代码就完善了,即使后续新增其他枪支类也可以,代码也可以适应!
总结
依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立,实现模块间的松耦合。我们在项目中使用这个原则要遵循下面的规则:
- 每个类尽量都有接口或者抽象类,或者抽象类和接口两都具备
- 变量的表面类型尽量是接口或者抽象类
- 任何类都不应该从具体类派生
- 尽量不要覆写基类的方法
- 结合里氏替换原则使用
以上就是今天《依赖倒置原则》的讲解,良好的代码风格需要长期不断的积累学习。各位读者大人若有问题,欢迎后台留言,我将第一时间回复!
下期文章将介绍《设计模式(四):接口隔离置原则》