依赖倒置:要依赖抽象,不要依赖具体类。

“倒置”的含义:

如果依赖于具体类去设计。那么画出来的图,高层组件在上面,底层组件在下面,高层组件依赖于底层组件。p138。

如果依赖抽象,例如使用工厂方法后,高层组件依赖于抽象类,底层组件也依赖于抽象类,有一部分箭头就被倒置了,高层组件不再依赖底层组件,而两者都依赖于抽象。

一些方针可以帮助避免在OO设计中违反依赖倒置原则:

  • 变量不可以持有具体类的引用(使用new会持有具体类的引用。可以使用工厂来避开)
  • 不要让类派生自具体类(派生自具体类,会依赖具体类,派生自一个抽象)
  • 不要覆盖基类中已实现的方法(如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的对象。基类中已实现的方法,应该由所有的子类共享)

注意:应该尽量达到这个原则,而不是随时都要遵循这个原则。如果深入体验这些方针,将这些方针内化成你思考的一部分,那么在设计时,你将知道何时有足够的理由违反这样的原则。

转载于:https://www.cnblogs.com/zhang-chi/p/6026719.html

设计原则——依赖倒置相关推荐

  1. 设计模式之禅之六大设计原则-依赖倒置原则

    依赖倒置原则 依赖倒置原则的原始定义是: ● 高层模块不应该依赖低层模块,两者都应该依赖其抽象; ● 抽象不应该依赖细节; ● 细节应该依赖抽象. 那什么是抽象?什么又是细节呢? ---->在J ...

  2. Java 七大设计原则 - 依赖倒置原则/面向接口编程

    一.什么是依赖倒置原则(Dependence Inversion Principle, DIP) ?  - 面向接口编程(Object-Oriented Design, OOD) (1) 高层模块与低 ...

  3. java设计模式之设计原则②依赖倒置原则

    定义: ⑴高层模块不应该依赖低层模块,二者都应该依赖其抽象 ⑵抽象不应该依赖细节,细节应该依赖抽象 ⑶针对接口编程,不要针对实现编程 我们通过抽象包括使用接口或者抽象类可以使各个类或模块的实现彼此独立 ...

  4. 设计原则——依赖倒置原则

    1.全称 Dependence Inversion Principle 缩写为:DIP 2.解释 高层模块不应该依赖低层模块,两者都应该依赖其抽象:抽象不应该依赖细节,细节应该依赖抽象 其核心思想是: ...

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

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

  6. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  7. 【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )

    文章目录 一.依赖倒置原则简介 二.面向实现编程代码示例 ( 反面示例 ) 1.顾客类 2.测试类 三.依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 ) 1.顾客类 2 ...

  8. 架构设计之依赖倒置、控制反转与依赖注入

    名词解释 依赖:一种模型元素之间的关系的描述.例如类A调用了类B,那么我们说类A依赖于类B. 耦合:一种模型元素之间的关系的描述.例如类A调用了类B或类B调用了类A,那么我们说类A与类B有耦合关系. ...

  9. 设计模式--6大原则--依赖倒置原则

    依赖倒置原则(Dependence Inversion Principle),简称DIP 定义 High level modules should depend upon low level modu ...

最新文章

  1. 面试题:找出出现次数超过1/2和1/3的数
  2. JavaSE(十)之反射
  3. 微信小程序服务(功能)直达是什么?有什么作用?
  4. yii框架相关知识(转)
  5. JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
  6. Intel 酷睿i5 6300HQ与Intel 酷睿i7 6700HQ哪个好
  7. 抽象工厂模式_抽象工厂模式
  8. oracle 外键子查询,外键、联合查询、子查询
  9. 使用 Laravel sharedLock 与 lockForUpdate 进行数据表行锁
  10. 转 android anr 分析示例,Android ANR 分析与解决
  11. 学习Opencv---例3.12----用imageROI来添加某范围的像素
  12. 各种UNIX系统下root密码的修复
  13. Zebra 命令模式分析2
  14. 内核中的TCP的追踪分析-9-TCP(IPV4)的socket的地址绑定--续2
  15. 双机流水作业调度问题——Johnson算法
  16. html 隐藏广告代码,Javascript实现关闭广告实现删除广告的效果
  17. 手机扫描二维码登录原理
  18. 给一个长度为n的字符串,找出长度为m的最小字典子序列【单调栈】
  19. Flutter Checkbox 复选框
  20. EAUML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息

热门文章

  1. 手机摇一摇效果-html5
  2. canvas 中的元素拖拽
  3. ajax 文件数据流,Ajax如何读取数据流中的xml文件?
  4. 服务器系统ghost版 raid,服务器在raid5下做系统ghost备份.docx
  5. linux memcache 源码包,Linux 安装Memcache扩展支持(示例代码)
  6. Kali Linux重新支持RTL8814au芯片
  7. Kali Linux又增加一个顶级域名kali.download
  8. Xamarin Android SDK无法更新的解决办法
  9. mac怎么用c语言写文件路径,Mac 中使用os模块更改文件路径
  10. 小米平板android版本,除了安卓MIUI7,小米平板2为什么要推出Win10版?