文章目录

  • 依赖倒置原则(Dependence Inversion Principle, DIP)
    • 代码实现
    • 总结:

依赖倒置原则(Dependence Inversion Principle, DIP)

依赖倒置原则即要依赖于抽象,不依赖于实现。

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

代码实现

依赖倒置在java中的实现:比如一位妈妈要给孩子讲故事

public class Book {public String getContext(){return "从前有座山。。。。。";}
}
public class Mother {public void tell(Book book){System.out.print("mom开始讲故事:");System.out.println(book.getContext());}
}
public class Child {public static void main(String[] args) {Mother mother = new Mother();mother.tell(new Book());}
}

如果我们把书换成日记,报纸之类的,发现妈妈居然读不了日记或报纸,想让妈妈读报纸必须得改变妈妈的代码,这显然是不合理的

public class Diary {public String getContext(){return "日记:今天是xxxxx";}
}

新增一个接口,读物IReader,书籍、日记、报纸等可以读的东西都实现读物接口

public interface IReader {/*** 获取所读的内容* @return*/public String getContext();
}

改动后的Mother类

public class Mother {public void tell(IReader reader){//只要拿到读物的实现类,不管是新闻还是什么,都可以读System.out.print("mom开始讲");System.out.println(reader.getContext());}
}

将之前的Book类和Diary类都实现读物接口

public class Book implements IReader{@Overridepublic String getContext() {return "故事书:从前有座山,。。。。。";}
}
public class Diary implements IReader{@Overridepublic String getContext() {return "日记:今天是xxxx";}
}

再想让妈妈读报纸,只需实现读物IReader接口即可

public class NewsPaper implements IReader{@Overridepublic String getContext() {return "报纸:北约停止东扩,乌苏关系降温";}
}

这样修改之后,无论Child做什么改动,都不需要修改Mother类中的内容,

测试:

实际开发中,Mother类代表高层类,负责完成主要的业务逻辑,如果修改错误的风险极大。开始写的程序Mother依赖于Book类,耦合性较高,是不可取的,Mother必须在Book类加载后才能阅读。

修改后的程序,Mother和Book类、Diary类都是没有联系的。这就是依赖倒置原则的使用,可以降低类之间的耦合性,提高系统的稳定性,降低修改程序造成的风险。
实际编程中一般需做到如下3点:

  • 低层模块尽量都要有抽象类或接口,或者两者都有
  • 变量的声明类型尽量是抽象类和接口
  • 使用继承时遵循里氏代换原则

总结:

IReader相当于基类,IReader出现的地方都可以用实现子类去替换它,这就是里氏代换原则(Liskov Substitution Principle LSP),任何基类可以出现的地方,子类一定可以出现。

里氏代换原则是依赖倒置原则的基础,依赖倒置原则的核心就是要面向接口编程,理解了面向接口编程,也就理解了依赖倒置。

设计模式之依赖倒置原则相关推荐

  1. 胖虎白话学习设计模式之依赖倒置原则(Dependence Inversion Principle)

    胖虎白话学习设计模式之依赖倒置原则(Dependence Inversion Principle) 记录胖虎学习设计模式过程,不许勿喷,转载请注明出处! (此博文为胖虎在PDF上截取.觉得写得通俗易懂 ...

  2. JAVA【设计模式】依赖倒置原则

    依赖倒置原则 一.设计模式的规范 二.依赖倒置原则 三.示例 非依赖倒置原则(硬编码) 依赖倒置原则 UML关系图 一.设计模式的规范 设计模式遵循六⼤原则:单⼀职责( ⼀个类和⽅法只做⼀件事 ).⾥ ...

  3. ASP.NET 设计模式中依赖倒置原则

    依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象. B.抽象不应该依赖于具体,具体应该依赖于抽象. 依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于 ...

  4. 设计模式:依赖倒置原则

    依赖倒置原则定义 依赖倒置原则(Dependence Inversion Principle ,DIP)定义如下: High level modules should not depend upon ...

  5. java 依赖倒置_设计模式之三依赖倒置原则(DIP)

    依赖倒置(Dependence Inversion Principle,DIP) High level modules should not deppend oupon low level modul ...

  6. 嘻哈说:设计模式之依赖倒置原则

    1.定义 按照惯例,首先我们来看一下依赖倒置原则的定义. 抽象不应该依赖于细节,细节应当依赖于抽象. 换言之,要针对接口编程,而不是针对实现编程. 为什么要这样说呢? 因为细节具有易变性,非常的不稳定 ...

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

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

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

    所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. ...

  9. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

  10. 设计模式六大原则之--依赖倒置原则(DIP)

    1. 依赖倒置原则,(Dependence Inversion Principle, DIP ) 定义:High level modules should not depend upon low le ...

最新文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. Django博客系统(展示首页)
  3. mongodb sharding 试用(四)
  4. TeXstudio中文编码踩坑实录
  5. 【无人机】他把死去的猫做成无人机,网友愤怒了!
  6. 我在一家通信公司上班
  7. 数据结构视频教程 -《[北风网]C#版数据结构与算法高级教程》
  8. Linux命令之md5sum
  9. linux vi编辑(20160628)
  10. java使用java.lang.Math类,生成100个0-99之间的随机整数,并找出它们中间的最大值和最小值,并统计大于50的整数的个数。打印3次运行结果,看是否相同。
  11. 共享店铺靠谱么?共享店铺哪家好?全方位测评企雀共享店铺,黑谷共享店铺!
  12. SSMS证书已被颁发者吊销解决办法
  13. 去掉设备和驱动器的百度网盘
  14. 如何彻底解决浏览器导航被劫持为www.hao123.com
  15. 转 Fedora各个历史版本官方下载地址
  16. 初到北上广打拼的外地人,生活状态是怎样的?
  17. core razor是什么_什么是Blazor和什么是Razor Components?
  18. 抖音神曲是如何“造”出来的?
  19. 为什么说CRM对B2B企业很重要?
  20. Linux环境编程05

热门文章

  1. java时钟代码_JAVA实现时钟
  2. aria2c 官方手册中文翻译版
  3. python实现将android手机通讯录vcf文件转化为csv
  4. Net硅谷动力网站 http://www.enet.com.cn/
  5. 《锋利的jQuery》笔记 第2章 jQuery选择器
  6. ffmpeg系列之编译安卓版ffmpeg库
  7. IOS 蓝牙开发(六)蓝牙手柄 GameController开发
  8. win10计算器rsh_酷到你认不出!新Win10计算器上手体验
  9. 全面解析特斯拉自动驾驶体系
  10. 31个工作习惯(转)