设计模式之依赖倒置原则
文章目录
- 依赖倒置原则(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),任何基类可以出现的地方,子类一定可以出现。
里氏代换原则是依赖倒置原则的基础,依赖倒置原则的核心就是要面向接口编程,理解了面向接口编程,也就理解了依赖倒置。
设计模式之依赖倒置原则相关推荐
- 胖虎白话学习设计模式之依赖倒置原则(Dependence Inversion Principle)
胖虎白话学习设计模式之依赖倒置原则(Dependence Inversion Principle) 记录胖虎学习设计模式过程,不许勿喷,转载请注明出处! (此博文为胖虎在PDF上截取.觉得写得通俗易懂 ...
- JAVA【设计模式】依赖倒置原则
依赖倒置原则 一.设计模式的规范 二.依赖倒置原则 三.示例 非依赖倒置原则(硬编码) 依赖倒置原则 UML关系图 一.设计模式的规范 设计模式遵循六⼤原则:单⼀职责( ⼀个类和⽅法只做⼀件事 ).⾥ ...
- ASP.NET 设计模式中依赖倒置原则
依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象. B.抽象不应该依赖于具体,具体应该依赖于抽象. 依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于 ...
- 设计模式:依赖倒置原则
依赖倒置原则定义 依赖倒置原则(Dependence Inversion Principle ,DIP)定义如下: High level modules should not depend upon ...
- java 依赖倒置_设计模式之三依赖倒置原则(DIP)
依赖倒置(Dependence Inversion Principle,DIP) High level modules should not deppend oupon low level modul ...
- 嘻哈说:设计模式之依赖倒置原则
1.定义 按照惯例,首先我们来看一下依赖倒置原则的定义. 抽象不应该依赖于细节,细节应当依赖于抽象. 换言之,要针对接口编程,而不是针对实现编程. 为什么要这样说呢? 因为细节具有易变性,非常的不稳定 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- 设计模式原则之依赖倒置原则
所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...
- 设计模式六大原则之--依赖倒置原则(DIP)
1. 依赖倒置原则,(Dependence Inversion Principle, DIP ) 定义:High level modules should not depend upon low le ...
最新文章
- c# 小票打印机打条形码_C#打印小票自带条形码打印
- Django博客系统(展示首页)
- mongodb sharding 试用(四)
- TeXstudio中文编码踩坑实录
- 【无人机】他把死去的猫做成无人机,网友愤怒了!
- 我在一家通信公司上班
- 数据结构视频教程 -《[北风网]C#版数据结构与算法高级教程》
- Linux命令之md5sum
- linux vi编辑(20160628)
- java使用java.lang.Math类,生成100个0-99之间的随机整数,并找出它们中间的最大值和最小值,并统计大于50的整数的个数。打印3次运行结果,看是否相同。
- 共享店铺靠谱么?共享店铺哪家好?全方位测评企雀共享店铺,黑谷共享店铺!
- SSMS证书已被颁发者吊销解决办法
- 去掉设备和驱动器的百度网盘
- 如何彻底解决浏览器导航被劫持为www.hao123.com
- 转 Fedora各个历史版本官方下载地址
- 初到北上广打拼的外地人,生活状态是怎样的?
- core razor是什么_什么是Blazor和什么是Razor Components?
- 抖音神曲是如何“造”出来的?
- 为什么说CRM对B2B企业很重要?
- Linux环境编程05