Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手撕设计模式,如何理解依赖倒置原则和好莱坞原则

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

作者头像
kk大数据
发布于 2020-06-29 07:50:25
发布于 2020-06-29 07:50:25
1.6K0
举报
文章被收录于专栏:kk大数据kk大数据

一、什么是依赖倒置原则

依赖倒置原则,就是从客户端代码调用框架代码,变成框架调用客户端代码。框架来定义接口,客户端来实现。

(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 方法。

那么提供给用户使用的就是 Cache 类,而 CacheManager 类给框架使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KK架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
架构师训练营第二周 - 依赖倒置、接口隔离原则
倒置了什么:面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。依赖倒置,倒置了模块或包的依赖关系(从上层以来下层,转变为下层依赖上层接口),倒置了开发顺序和职责
lukachen
2023/10/22
1650
架构师训练营第二周 - 依赖倒置、接口隔离原则
什么是依赖倒置原则
依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计五大基本原则之一,由罗伯特·C·马丁(Robert C. Martin)在《敏捷软件开发:原则、模式与实践》一书中提出。
小白的大数据之旅
2024/11/20
1280
设计模式(三):依赖倒置原则
定义:高层模块不应该依赖于低层模块,两者都应依赖于抽象。抽象不应该依赖细节,细节应依赖于抽象。
xujjj
2019/06/29
1.1K0
设计模式(三):依赖倒置原则
设计模式 ☞ 七大设计原则之依赖倒置原则
  依赖倒置原则(Dependence Inversion Principle,DIP)是 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在 C++ Report 上发表的文章。依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。   依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。这里的抽象指的是接口或者抽象类,而细节是指具体的实现类。使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。
Demo_Null
2020/12/18
2.1K0
设计模式 ☞ 七大设计原则之依赖倒置原则
6大设计原则之依赖倒置原则
High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
烟草的香味
2019/07/25
5680
SOLDI原则之DIP:依赖倒置原则
本篇介绍软件设计原则之一DIP:依赖倒置原则。很多知识回头来看会有新的理解。看到一句话,一段文字,一个观点有了新的理解,醍醐灌顶的感觉。这种感觉像是一种惊喜。古语说:温故而知新。
coderidea
2022/06/08
4520
SOLDI原则之DIP:依赖倒置原则
设计模式六大原则(3):依赖倒置原则
文章主要讲述了设计模式中的依赖倒置原则,该原则强调高层模块不应该依赖低层模块,而都应该依赖抽象,并且抽象不应该依赖细节,细节应该依赖抽象。通过使用接口或抽象类进行依赖倒置,可以降低类之间的耦合性,提高系统的稳定性,降低修改程序造成的风险。同时,依赖倒置原则还有助于提高代码的可扩展性和复用性,使程序更易于维护。
企鹅号小编
2018/01/02
6130
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(3):依赖倒置原则
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。 解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。          依赖倒置原则基于这样一个事实:相对于细节的多
Angel_Kitty
2018/04/08
5680
设计模式原则:依赖倒置原则
依赖倒置原则表示高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。也就是说,要针对接口编程,而不是针对实现编程。
运维开发王义杰
2023/08/10
2030
设计模式原则:依赖倒置原则
面向对象的设计原则-"依赖倒置原则"
Dependence Inversion Principle,DIP"依赖倒置原则",依赖倒置的原始定义是:
别明天就今天吧
2020/09/07
7300
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )
依赖倒置原则 : 高层模块 不应该 依赖 低层模块 , 二者都应该 依赖其抽象 ; 抽象 不应该 依赖细节 , 细节应该依赖抽象 ;
韩曙亮
2023/03/29
5260
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )
设计模式——三:依赖倒置原则
● 高层模块不应该依赖低层模块,两者都应该依赖其抽象; ● 抽象不应该依赖细节; ● 细节应该依赖抽象。
三分恶
2020/07/16
5720
依赖倒置原则
1. High level modules should not depend upon low level modules.Both should depend upon abstractions. 高层模块不应该依赖低层模块,两者都应该依赖其抽象(模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的)
LieBrother
2019/03/29
6470
依赖倒置原则
深入理解DIP:依赖倒置原则
ocp告诉我们开闭原则,对扩展开放对修改关闭提出了一个更严格的设计:程序不修改,新增功能就是添加新代码而不是在旧代码里面修改,要做到这个 也是要很好的进行抽取共通的逻辑,然后把变化的部分抽取出来做扩展,旧的核心的部分是稳定的。
北洋
2023/12/13
2320
设计模式六大原则(三)----依赖倒置原则
依赖倒置原则(Dependence Inversion Principle, DIP), 其含义:
用户7798898
2021/06/10
2.4K0
Java新人常问:什么是依赖倒置原则?万字案例给你讲懂!
Dependence Inversion Principle,DIP High level modules should not depend upon low level modules.Both should depend upon abstractions.高层模块不应该依赖低层模块,二者都应该依赖其抽象 Abstractions should not depend upon details.Details should depend upon abstractions.抽象不应该依赖细节;细节应该依赖抽象
JavaEdge
2021/12/07
1.6K0
Java新人常问:什么是依赖倒置原则?万字案例给你讲懂!
设计模式六大原则: 老板是如何减轻负担的 -- 依赖倒置原则
很多创业公司都对外宣称“扁平化管理”,什么是“扁平化管理”呢?请看下面这张架构图:
张拭心 shixinzhang
2022/05/10
2550
设计模式六大原则: 老板是如何减轻负担的 -- 依赖倒置原则
软件架构设计原则之依赖倒置原则
依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。接下来看一个案例,还是以Course(课程)为例,先来创建一个类Tom:
Tom弹架构
2021/10/24
5980
依赖倒置原则详解
在大型系统架构设计中,依赖倒置原则(Dependency Inversion Principle,DIP)被广泛视为增强系统灵活性和可维护性的核心原则之一。最近在架构设计审查中,我们经常遇到由于依赖关系设计不当导致的模块耦合问题,这些问题直接影响了系统的扩展性和可测试性。DIP 提供了一种思维框架,旨在通过抽象化依赖关系,构建更加稳健的系统架构。
井九
2024/10/12
1780
依赖倒置原则详解
大话设计模式--第五章 依赖倒置原则
依赖倒置原则: 原话解释的是, 抽象不应该依赖于细节, 细节应该依赖于抽象. 说白了, 就是上面那句话。针对接口编程, 不要针对实现编程。
用户7798898
2020/09/27
3400
相关推荐
架构师训练营第二周 - 依赖倒置、接口隔离原则
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档