01-03.依赖倒转原则(Dependence Inversion Principle)

1、基本介绍
依赖倒转原则(Dependence Inversion Principle),他有五个点需要我们去掌握,如下:
(1)高层模块不应该依赖低层模块,二者都应该依赖其抽象(何为抽象:抽象类或者接口我们就称为抽象,换言之就是可以去依赖接口,也可以去依赖抽象类,但是不能去依赖一个具体的子类)。
(2)抽象不应该依赖细节,细节应该依赖抽象。
(3)依赖倒转(倒置)的中心思想是面向接口编程
(4)依赖倒转原则是基于怎样的理念来设计的呢?我们程序员在开发的过程中,发现有这样的一种规律:相对于细节的多变性,我们抽象的东西要相对稳定的多(也就是说高层的相对来说要稳定一些)。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。因此在java中,抽象指的是接口或抽象类(这也是为什么我们在后面学设计模式的时候,往往他的高层模块都是接口或者是抽象类),而细节就是具体的实现类。
(5)使用接口或抽象类的目的是制定好规范(这也就是我们经常所说的接口和抽象类的价值在什么地方呢?在于设计),而不涉及任何具体的操作,把展现细节的任务交给他们的实现类也就是他的子类)去完成。

2、应用案例,如下步骤:
下面的案例我们先演示不用依赖倒转会出现什么问题,使用了依赖倒转原则又会让我们程序有什么好的地方。所以我们要有一个场景,说有一个Person类,他里有一个接收消息的功能。

(1)方案一使用传统方法实现Person类接受消息

 

 

 (2)方案二使用依赖倒转原则进行优化

 

 

 3、依赖关系传递的三种方式和应用案例

关于依赖关系我们后面UML类图学习的时候还要细说一下,这们我们先要明白依赖关系在我们代码当中有三种方式传递值(对象),如下:

 

4、依赖倒转原则的注意事项和细节:
(1)低层模块尽量都要有抽象类或接口(比如A类是个子类,那么他的上一级尽量继承抽象类或实现接口,尽量不要让一个类孤零零在哪里,除非有特殊情况),或者两者都有,程序稳定性更好。
(2)变量的声明类型尽量是抽象类或接口, 这样我们的变量引用和实际对象之间,就存在一个缓冲层,利于程序扩展和优化,如上面的“3、依赖关系传递的三种方式和应用案例”。
(3)继承时遵循里氏替换原则。

 

5、最后

如果你需要转载请说出原文出处,个人总结有不足之处请留言指出稍候修正,当然也欢迎大家一起探讨,欢迎你加入996.ICU……

posted @ 2020-11-29 07:26  PickRecalled  阅读(264)  评论(0编辑  收藏  举报