一、什么是依赖倒置原则

依赖倒置原则,就是从客户端代码调用框架代码,变成框架调用客户端代码。框架来定义接口,客户端来实现。
(1)高层模块不应该依赖底层模块,二者都应该依赖抽象
(2)抽象不应该依赖细节,细节应该依赖抽象
(3)依赖倒置原则的中心思想是面向接口编程
(4)依赖倒置原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多,以抽象为基础搭建的架构比以细节为基础搭建的架构要稳定的多

二、为什么有时候依赖倒置原则又被称为好莱坞原则?

好莱坞原则:别打电话给我,有事我会打电话给你
好莱坞原则用在系统的高层组件和低层组件之间,低层组件将自己挂钩到系统上,高层组件会来决定什么时候和如何调用低层组件。高层组件对待低层组件的方式是,别来调用我,我会调用你。
好莱坞原则和依赖倒置原则之间还是有所区别的。
依赖倒置原则更多是说,我们应该面向接口编程;好莱坞原则是说,低层组件将自己挂钩到系统上,由系统来主动调用。

三、tomcat 框架如何实现依赖倒置原则的


如图是tomcat处理web请求的流程图,请求会经过 connector,coyote,engine,host,context,Servlet,层层传递最终传递到我们的应用程序里面来。我们只需要把程序发布成war包放在指定的目录下即可使用。
我们的应用程序就是低层组件,底层组件没有去调用tomcat的什么类,而是框架层主动调用应用程序来处理。
这就体现了依赖倒置原则,高层组件来定义接口和规范,底层组件来实现。

四、利用接口隔离原则优化下面的缓存类

如图,希望 reBuild 方法只是给框架调用,客户端不应该调用 reBuild 类,该如何设计

思路如下:
caache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。

手撕设计模式,如何理解依赖倒置原则和好莱坞原则相关推荐

  1. 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则

    依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...

  2. 手撕设计模式之「工厂方法模式」(Java描述)

    前言 工厂方法模式是对简单工厂模式的改进,它通过对工厂类进行抽象形成一个抽象工厂接口,再让具体的工厂负责对应产品的创建,使得在增加产品的场景中也满足"开闭原则".希望通过本文的学习 ...

  3. 手撕设计模式之「简单工厂模式」(Java描述)

    前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...

  4. 设计模式 — 6大设计原则(依赖倒置和接口隔离原则)

    设计模式 依赖倒置原则 示例 一 示例 二 依赖的三种写法 总结 接口隔离原则 实例 一 总结 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)这个名 ...

  5. 设计模式系列:依赖倒置原则

    问题由来   问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类A一般是高层模块,负责复杂的业务逻辑:类B和类C是低层模块,负责基本的原子操作:假如修 ...

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

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

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

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

  8. 【设计模式】五:依赖倒置与里氏代换原则

    /** * 依赖倒转原则 * 定义: 抽象不应该依赖细节,细节应该依赖于抽象 * 解释:开发过程中,要学会针对接口编程,不要针对需求进行编程 * 特征: * 高层模块不应该依赖低层模块,两个都应该依赖 ...

  9. 手撕设计模式之「单例模式」(详细解析)

    前言 单例模式主要用来保证系统中某个类的实例对象的唯一性,是最简单的一种设计模式,而且在面试中也经常会被问到,是非常值得我们去学习的.如果你们面试遇到了哪些设计模式的考察,也欢迎留言,我会及时发新的博 ...

最新文章

  1. 数据库基础笔记(MySQL)3 —— 基础操作
  2. ubuntu12.04下android开发环境搭建两个注意事项
  3. CosiWorksNew
  4. 谁说菜鸟不会数据分析--读书笔记
  5. repo同步代码_工欲善其事,必先利其器:repo 介绍
  6. nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例
  7. 小米 9 开源内核代码,上市即开源
  8. 教你成为全栈工程师(Full Stack Developer) 一-各显神通总结八大类编程语言的区别...
  9. 利用nginx 反向代理解决跨域问题
  10. qgis导出shp_使用QGIS将文本坐标转换为矢量文件
  11. OLD:用于单变量和多变量异常值检测的SPSS宏
  12. Android studio底部Logcat模块不见了以及Locat日志中包含了很多无用的错误日志筛选方法
  13. SAP UI5 应用开发教程之八十三 - SAP UI5 的自动化测试套件页面的开发步骤介绍试读版
  14. 数据结构与算法(十一)Trie字典树
  15. 数据库数据的备份和还原
  16. 指针和结构体(初级)
  17. python离线翻译包下载_Python翻译
  18. 增速减缓、毛利率降至新低 丁磊“再造网易”要缓缓了
  19. 利用Python探测附近WIFI密码的详细代码
  20. Linus:“我删除了 Linux,因为它就是个垃圾!”

热门文章

  1. kotlin 两目运算符
  2. CSBTE 启动器——BT-Editor VII
  3. Linux4.1初始化流程详细注释——第一阶段head.S与head-common.S
  4. 15:Named Entity Recognition without Labelled Data: A Weak Supervision Approach
  5. java毕业设计搬家预约系统Mybatis+系统+数据库+调试部署
  6. Linux设备模型——设备驱动模型和sysfs文件系统解读笔记
  7. oracle数据库优化 -DBA常用Oracle数据库检查报告
  8. 深度学习:利用神经网络在少量数据情况下预测房价走势
  9. 紫光展锐:大破大立 做数字世界的生态承载者
  10. google的fav icon变了