依赖倒置原则

Posted jikjk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了依赖倒置原则相关的知识,希望对你有一定的参考价值。

依赖倒置原则

定义

  1. 高层模块不应该依赖低层模块,二者都应该依赖其抽象(接口)
  2. 抽象(接口)不应该依赖细节;
  3. 细节应该依赖抽象

解释:

抽象:即抽象类或接口,两者是不能够实例化的。

细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化。

 本质:面向实现编程与面向接口编程之争。

请看一个面向实现的案例:

jack正在吃苹果的例子

技术图片

 

技术图片

技术图片

技术图片

如果jack要吃其他的食物就要修改代码,不符合开闭原则。

将上述的例子重构:

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

思考:在大型项目中采用哪种更符合开发的要求。

答案不言而喻。

依赖倒置原则的核心就是面向接口编程的思想。

相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。

 

依赖很好理解,是类与类之间的关系的一种,什么是倒置,在面向现实编程的时候,Jack吃苹果,我们就写一个Jack类,一个apple类就好,Jack去吃好了,倒置的意思就是提取公共的抽象,面向接口(抽象类)编程。不再依赖于具体实现了,而是依赖于接口或抽象类,我先写一个people的接口,(今天是Jack,明天可能就是小明)一个Food接口,然后去实现,这样我们的思维方式也发生了“倒置”了。

依赖的三种实现方式(对象的依赖关系有三种方式来传递)

接口方法中声明依赖对象。(上边的案例使用的此方法)

构造方法传递依赖对象。在构造函数中的需要传递的参数是抽象类或接口的方式实现。(如下种方式)

 技术图片

Setter方法传递依赖对象。在我们设置的set方法中的参数为抽象类或接口,来实现传递依赖对象。

 技术图片

使用依赖倒置原则

优点:

减少类之间的耦合

提高系统的稳定性

提高系统的可维护性和可扩展性

 

缺点:

导致有更多的类和接口来维护

 

依赖反转原则不应该盲目使用在模块中。比如一些功能类之类的,则不需要使用这个原则。

最佳实践:

每个类尽量有借口或者抽象类

变量的类型尽量声明为借口或者抽象类

尽量不要复写父类的方法

结合里氏替换原则来使用

 

依赖倒置原则的核心是面向接口编程的思想,尽量对每个实现类都提取抽象和公共接口形成接口或抽象类,依赖于抽象而不要依赖于具体实现。

依赖倒置原则的本质其实就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。

 

以上是关于依赖倒置原则的主要内容,如果未能解决你的问题,请参考以下文章

依赖倒置原则

依赖倒置原则

依赖倒置原则——面向对象设计原则

依赖倒置原则

手撸golang 架构设计原则 依赖倒置原则

Java设计原则—依赖倒置原则(转)