依赖倒转原则_设计模式原则-依赖倒置原则

1、什么是依赖倒转原则?

所谓依赖倒置原则,就是不论高层组件和低层组件都应该依赖于抽象,而不是具体实现类。听起来更像是“针对接口编程,而不是针对实现编程”,但是这里依赖倒置原则更强调“抽象”的概念,不要让高层组件依赖低层组件,更不能依赖具体实现类,都要依赖于抽象。依赖倒置原则的核心在于“面向接口编程”,目的在于“解耦”。

2、这里的倒置是什么意思呢?

依赖倒置原则中的倒置是指我们的思想要和一般的“自顶向下”结构化设计思想相反。面向过程的设计方法是从顶端分析,然后到实现类,例如,简单工厂模式中我们让工厂生产产品,但是又不想让工厂和具体实现类存在任何关系,否则就对具体实现类产生了依赖,这是我们不希望看到的结果。这时候我们就应该将思想倒置一下,不要从顶端开始,我们从具体的实现类开始,看看能够抽象出什么,然后一切都依赖抽象来进行,这样就与我们的目标相近了。

3、为什么有依赖倒转原则?

在面向过程中,往往是高层组件调用低层组件,这样,高层组件就会依赖于低层组件,当低层组件发生剧烈变动时,高层组件也要跟着变动,就会倒置模块的复用性大大降低,并且大大提高开发成本,增加了软件扩展、维护的复杂度。如下为面向过程的软件开发调用图:

7f119c0e6e6cca99a8a12f389e19606c.png

由图可以看出,高层组件调用低层组件,即高层组件依赖于低层组件,当低层组件发生变化时,势必会对高层组件产生影响。

那么我们应该怎样改变这种情况呢?应用依赖倒转原则可以解决这个问题,即面向接口编程。让我们的程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节之间的耦合度。面向接口示意图如下:

bc7231bece86b53ac910e42ca3f58cf7.png

这样,无论低层组件怎样变化,只要抽象组件不发生变化,高层组件就不会发生变化,实现了客户程序与实现细节的解耦。

4、举例说明依赖倒置原则?

(1)不符合依赖倒转原则的类图

8b8e9f77ffc38a09f8d8423681a4231f.png

在这幅类图中,动物工厂(高层组件)生产猫和狗(猫狗具体类属于低层组件)时就要去调用猫和狗的构造方法,当我想增加生产鱼的功能时,就要增加鱼类,还要修改动物工厂类,这就违背了开闭原则。造成这种情况的原因就是因为动物工厂过于依赖具体动物类。

(2)符合依赖倒转原则的类图

49801b8d272bc14cf35e4ecda04efb75.png

在这幅类图中,动物工厂(高层组件)生产猫和狗(猫狗具体类属于低层组件)时依然需要调用猫和狗的构造方法,但这时候因为中间增加了抽象组件,我要增加生产鱼的功能的时候只要增加鱼类和鱼工厂就行了,而不需要去修改已有的类。这符合开闭原则,增加了程序的可扩展性和可维护性。

小结:依赖倒置原则中的”倒置“说的是要和面向过程的思想倒置,用面向对象的思想去设计程序。值得注意的是,面向对象是一种思想,而不是说用了面向对象的编程语言,用类和对象写代码就是面向对象了,不要挂着”面向对象“的羊头,卖着”面向过程“的狗肉。只要开发程序,就要奔着将软件做成一个易扩展的、能够适应需求变化的软件,这是我们一直追求的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值