前面有几篇文章,已经教了一些方式或者方法,帮助您摆脱娘胎自带的面向过程编程,从而转为面向对象。

本文讲一下面向对象依赖倒置,使用具体的例子来解释可能好些,网上千篇一律的大多数文字描述,各位估计也不一定真的看明白了。于是,这就是本文的价值所在。

由于我一路走过来,所以,我写的关于面向对象的思想,都是实践性的经验,会站在您还是一个初学者的身份上去讲述它,尽量让读者明白。

本文例子出现的中文是为了便于理解,您实际编写代码时,不宜写中文。


一、什么是依赖倒置

普遍的解释是:程序要依赖于抽象接口,不要依赖于具体实现。

这话我当初看了无数遍,在我初期对面向对象理解还不深的时候,我认识这些字理解这些话,以为自己懂了,实际上,我压根不会用。很长一段时间的实践之后,我才终于明白这话的意思。

二、理解倒置

依赖倒置,倒置的意思就是反过来、翻转过来、倒转过来。本来是先看到头后看到尾的,倒立过来后,就先看到尾再看到头。总之就是反转过来。

三、理解依赖

当初我怎么都想不明白依赖是个啥东西,怎么回事。其实这是因为我当时对依赖不理解的原因,您今天不理解也正是因为这个原因。所以:

您需要了解UML中的关联和依赖。
您需要了解依赖注入中的依赖。
您需要了解属性的定义,这个应该好理解。
您需要了解方法的定义,这个应该好理解。

面向对象中的依赖倒置,既指UML中的关联,也指UML中的依赖,就是UML中的关联和依赖都要适合这个原则。

依赖注入中的依赖,指属性依赖以及方法的参数依赖,这2种都要适合这个原则。

上图红圈的是方法的参数依赖,下图则是属性依赖。

方法参数依赖,是指传进去的方法参数,是一个对象。属性依赖是指返回值是一个对象。

下图则是依赖注入的依赖,通常是构造函数的方法参数进行依赖,当然也有属性依赖注入的,就不举例子了。

四、理解依赖后有什么用?

通过上面的第3点,您已经知道了什么叫依赖,但是你不知道依赖倒置的依赖,要怎么用?

其实就是指:上面第3点中的所有依赖,传递过去的参数(方法),或者返回值(属性),它们必须是抽象的。抽象是指抽象类和接口两种。使用依赖倒置,则建议您更好的方式是使用接口,因为接口是顶级抽象。

所以,您会看到,第3点的截图中,很多的依赖参数是传递的以字母I开头的接口。

五、按照这么做后,生产中实际会有什么效果?

是的,您现在知道了要怎么用。但您不知道为啥要这么用,用了后会怎么样,不用就又会怎么样?

上图是一个形状接口,以及黑板类。在黑板上绘制一个图形,需要使用形状。

现在它的参数依赖是接口,所以,我可以传递正方形这个形状,也可以传递圆锥、圆柱这些形状。这就是依赖倒转的应用。

如果您不使用接口,比如直接参数要求传“正方形”,那么,这个“在黑板上绘制图形”的方法就是个死方法了,限定了只能传正方形对象。

祝您用餐愉快。

依赖倒置原则_C#教您一步步摆脱面向过程:依赖倒置相关推荐

  1. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  2. 依赖倒置原则_面向对象的设计原则你不要了解一下么?

    昨天我看了单一职责原则和开闭原则,今天我们再来看里式替换原则和依赖倒置原则,千万别小看这些设计原则,他在设计模式中会有很多体现,所以理解好设计原则之后,那么设计模式,也会让你更加的好理解一点. 前言 ...

  3. 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 这 7 种设计原则是软件设计 ...

  4. Java设计模式6,依赖倒置原则

    目录 一.依赖倒置原则定义 二.违背原则方案 1.项目经理 2.获取平均项目进度 3.获取最慢项目进度 三.依赖倒置原则改善代码 1.获取项目进度接口 2.获取平均项目进度实现类 3.获取最慢项目进度 ...

  5. 面向对象设计原则-03依赖倒置原则

    面向对象设计原则-03依赖倒置原则 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,DIP)是 Object Mentor 公司总裁罗伯特·马丁(Rob ...

  6. 手撕设计模式,如何理解依赖倒置原则和好莱坞原则

    一.什么是依赖倒置原则 依赖倒置原则,就是从客户端代码调用框架代码,变成框架调用客户端代码.框架来定义接口,客户端来实现. (1)高层模块不应该依赖底层模块,二者都应该依赖抽象 (2)抽象不应该依赖细 ...

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

    前两节我们详细介绍了面向对象设计原则中的开闭原则和里氏替换原则,在本节中我们来介绍依赖倒置原则. 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,DIP ...

  8. 设计模式-依赖倒置原则

    依赖倒置原则 1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,DIP)这个名字看着有点别扭,"依赖"还"倒置" ...

  9. 深入理解依赖倒置原则(Dependence Inversion Principle)

    Dependence Inversion Principle 依赖倒置原则(Dependence Inversion Principle) What 什么是依赖倒置原则? Why 为什么使用依赖倒置原 ...

最新文章

  1. 男孩子学计算机和学医哪个好,你认为学医好还是读211大学的电子信息好?
  2. extjs4.0视频教程下载
  3. 如何在mac上面看充电器的瓦数!
  4. html 和 body标签的 css 设置
  5. php透明颜色的代码,PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度
  6. hibernate在分层架构中修改数据(update)时遇到的问题!!
  7. cad计算总长度插件_超实用的CAD插件大合集,视频教程手把手教学,工作效率翻倍...
  8. 网站常见问题1分钟定位(三)| 如何使用阿里云ARMS轻松重现用户浏览器问题
  9. capsule 安装_Capsule Calendar
  10. 解决Spring+Quartz无法自动注入bean问题
  11. 微信小程序unionid获取问题
  12. 985计算机只考数据结构,初试只考数据结构的985院校
  13. 网络编程之OSI七层协议
  14. 中文版通用工程师软件DPS 别克雪佛兰编程改装
  15. redies成神之路
  16. 常见的激活函数及其优缺点分析
  17. intellij idea 更换代码颜色(教程)
  18. 超声波传感器--Arduino
  19. IDEA配置优化,idea配置大全
  20. 机械振动信号13个频域指标

热门文章

  1. 关于异常信息未找到成员
  2. Framebuffer基础知识(三十)
  3. Android10加入APEX目的
  4. Win10(Server)与Ubuntu18.04(Client)使用Synergy--键盘鼠标共享
  5. Emacs + gdb单步调试汇编代码
  6. Android9.0 setMasterVolume流程分析(二十三)
  7. arm和thumb指令模式
  8. Android Camera架构浅析
  9. linux centos history 查看命令历史 显示时间戳
  10. 怎么做应力应变曲线_常用的应力测试方法及其在船舶系统零部件中的应用