手撕设计模式,如何理解依赖倒置原则和好莱坞原则
一、什么是依赖倒置原则
依赖倒置原则,就是从客户端代码调用框架代码,变成框架调用客户端代码。框架来定义接口,客户端来实现。
(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 方法。
手撕设计模式,如何理解依赖倒置原则和好莱坞原则相关推荐
- 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则
依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...
- 手撕设计模式之「工厂方法模式」(Java描述)
前言 工厂方法模式是对简单工厂模式的改进,它通过对工厂类进行抽象形成一个抽象工厂接口,再让具体的工厂负责对应产品的创建,使得在增加产品的场景中也满足"开闭原则".希望通过本文的学习 ...
- 手撕设计模式之「简单工厂模式」(Java描述)
前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...
- 设计模式 — 6大设计原则(依赖倒置和接口隔离原则)
设计模式 依赖倒置原则 示例 一 示例 二 依赖的三种写法 总结 接口隔离原则 实例 一 总结 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)这个名 ...
- 设计模式系列:依赖倒置原则
问题由来 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类A一般是高层模块,负责复杂的业务逻辑:类B和类C是低层模块,负责基本的原子操作:假如修 ...
- Java设计模式6,依赖倒置原则
目录 一.依赖倒置原则定义 二.违背原则方案 1.项目经理 2.获取平均项目进度 3.获取最慢项目进度 三.依赖倒置原则改善代码 1.获取项目进度接口 2.获取平均项目进度实现类 3.获取最慢项目进度 ...
- 深入理解依赖倒置原则(Dependence Inversion Principle)
Dependence Inversion Principle 依赖倒置原则(Dependence Inversion Principle) What 什么是依赖倒置原则? Why 为什么使用依赖倒置原 ...
- 【设计模式】五:依赖倒置与里氏代换原则
/** * 依赖倒转原则 * 定义: 抽象不应该依赖细节,细节应该依赖于抽象 * 解释:开发过程中,要学会针对接口编程,不要针对需求进行编程 * 特征: * 高层模块不应该依赖低层模块,两个都应该依赖 ...
- 手撕设计模式之「单例模式」(详细解析)
前言 单例模式主要用来保证系统中某个类的实例对象的唯一性,是最简单的一种设计模式,而且在面试中也经常会被问到,是非常值得我们去学习的.如果你们面试遇到了哪些设计模式的考察,也欢迎留言,我会及时发新的博 ...
最新文章
- 数据库基础笔记(MySQL)3 —— 基础操作
- ubuntu12.04下android开发环境搭建两个注意事项
- CosiWorksNew
- 谁说菜鸟不会数据分析--读书笔记
- repo同步代码_工欲善其事,必先利其器:repo 介绍
- nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例
- 小米 9 开源内核代码,上市即开源
- 教你成为全栈工程师(Full Stack Developer) 一-各显神通总结八大类编程语言的区别...
- 利用nginx 反向代理解决跨域问题
- qgis导出shp_使用QGIS将文本坐标转换为矢量文件
- OLD:用于单变量和多变量异常值检测的SPSS宏
- Android studio底部Logcat模块不见了以及Locat日志中包含了很多无用的错误日志筛选方法
- SAP UI5 应用开发教程之八十三 - SAP UI5 的自动化测试套件页面的开发步骤介绍试读版
- 数据结构与算法(十一)Trie字典树
- 数据库数据的备份和还原
- 指针和结构体(初级)
- python离线翻译包下载_Python翻译
- 增速减缓、毛利率降至新低 丁磊“再造网易”要缓缓了
- 利用Python探测附近WIFI密码的详细代码
- Linus:“我删除了 Linux,因为它就是个垃圾!”
热门文章
- kotlin 两目运算符
- CSBTE 启动器——BT-Editor VII
- Linux4.1初始化流程详细注释——第一阶段head.S与head-common.S
- 15:Named Entity Recognition without Labelled Data: A Weak Supervision Approach
- java毕业设计搬家预约系统Mybatis+系统+数据库+调试部署
- Linux设备模型——设备驱动模型和sysfs文件系统解读笔记
- oracle数据库优化 -DBA常用Oracle数据库检查报告
- 深度学习:利用神经网络在少量数据情况下预测房价走势
- 紫光展锐:大破大立 做数字世界的生态承载者
- google的fav icon变了