设计原则-依赖倒置原则

【六大设计原则】3. 依赖倒置原则 -Dependence Inversion Principle: DIP,Dependence Inversion Principle: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should d 阅读详情

一、什么是依赖倒置原则

Dependence Inversion Principle,简称DIP,是指高层模块(直接调用层)不应该依赖底层模块(具体的实现层),反过来也是,它们之间应该依赖抽象层。

也就是说在高层模块与底层模块之间,使用抽象层做桥梁,高层模块只管使用抽象层的东西,底层模块只管基于抽象层拓展各种个性功能,高层模块依赖抽象,底层模块依赖抽象,在运行态中传入不同的实例即可无缝地完成各种需求(借助了里氏替换原则),同时也是开闭原则的基础。

在java中具体点就是,在一个调用类(高层模块)中只调用接口/抽象类(抽象层)的方法,而使用各种不同的具体类(底层模块)去实现这个接口/抽象类的方法,在使用的时候直接传入这些具体类的实例可以达到调用不同的方法。

二、依赖倒置的优点

  • 强调面向接口编程,降低类与类之间的耦合性

使用接口或抽象类去定义规范和契约,不涉及具体操作,调用类直接遵循这些规范或契约来使用,不必担心具体是如何操作的;而实现类只管根据这些规范和契约去实现不同的功能,最终通过里氏替换,达到最终目的,相互独立、解耦,除非变动规范和契约

  • 增强系统的稳定性

具体细节变化多端,而抽象想多稳定,以抽象为基础、面向接口编程的系统比面向细节的稳定多了。

  • 提高代码的可读性和维护性

依赖关系清晰明了,高层与底层相互解耦,各自维护也相互不影响

  • 降低修改代码带来的风险

因为相互解耦,有一块功能代码出现bug,修改这一块代码不会影响其他块的正常使用。

三、依赖倒置的缺点

除了抽象难度大点以外,几乎无缺点,依赖倒置还是挺基础、使用的一个原则。

四、依赖倒置的具体实现

1.  定义一个接口(作为高层与底层的依赖桥梁)

public interface IBridge {
    void connect();
}

2. 定义一个调用类(高层模块,只依赖接口)

public class dock {
    public static void joint(IBridge bridge){
        bridge.connect();
    }
}

3. 定义多个接口的具体类(底层模块,只实现接口)

public class BridgeA implements IBridge {
    @Override
    public void connect() {
        System.out.println("连接船A");
    }
}

public class BridgeB implements IBridge {
    @Override
    public void connect() {
        System.out.println("连接船B");
    }
}

4. 测试类(只需要传入接口的实例即可完成调用)

public class Test {
    public static void main(String[] args) {
        Dock.joint(new BridgeA());
        Dock.joint(new BridgeB());
    }
}

轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI) 写这篇文章的原因是这两天在编写关于 Dagger2 主题的博文时,花了大量的精力来解释依赖注入这个概念。后来想一下,这些在面向对象开发过程中与依赖相关的诸多术语和概念实际情况下非常的抽象,因此独立成文也有就一定的意义,旨在帮助初学者快速地对这些概念有一个大致的印象,然后通过一些实例来领悟它们之中的内在奥秘。 什么是依赖(Dependency)?依赖是一种关系,通俗来讲就是一种需要。 程序员需要电 阅读详情

相关推荐

【愚公系列】面向对象设计原则(四)-依赖倒置原则(Dependence Inversion Principle DIP)

面向对象设计原则是一些通用的软件设计原则,用于指导软件设计人员开发高质量、可扩展、可维护的软件系统。这些原则的作用如下:提高软件系统的可维护性:遵循面向对象设计原则可以将代码分解为更小、更专注的模块,从而降低代码的复杂性和耦合度,提高系统的可读性和可维护性。提高软件系统的可扩展性:开放封闭原则可以帮助软件系统更容易地适应变化,降低对现有代码的影响,从而提高软件系统的可扩展性和灵活性。

愚公智库 47万+

什么是依赖倒转原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 优点:依赖倒置原则可以提高程序的可扩展性,也可有效的降低程序耦合;依赖倒置原则避免了修改负责复杂逻辑的高层模块,大大提高了程序的稳定性。 依赖倒置原则简单点的说就是在编程过程中应尽可能引用抽象类,减少引用具体类。举个例子来说抽象类animal中有很多的共性,而具体类dog(由基类animal派生而来)中...

weixin_43969584的博客 789

手把手教你用海康威视相机+DLP4500搭建双目结构光系统(附避坑指南)

本文详细介绍了如何使用海康威视相机和DLP4500搭建双目结构光三维测量系统,涵盖硬件选型、系统搭建、双目标定及三维重建等关键步骤。特别针对预算有限的开发者和实验室团队,提供实用的避坑指南和优化技巧,帮助实现0.02mm的高精度测量。

weixin_42526087的博客 461

设计模式六大原则-依赖倒置原则

1、依赖倒置原则概述(DIP) 三层含义:(1)高层模块不应该依赖底层模块,两者都应该依赖抽象(2)抽象不应该依赖细节(3)细节应该依赖抽象。 每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是底层模块(一般是接口、抽象类),原子逻辑的组装就是高层模块。在Java中,抽象就是指接口或抽象类,两者都不能被实例化。细节就是实现类,实现接口或者继承抽象类而产生的类就是细节,可以...

u014086857的专栏 456

TI DSP TMS320F280025 Note1:工程模板Template创建

该方法新建的工程支持寄存器开发,同时也支持库函数开发,新建后移动该工程也不需要重新修改路径,路径使用变量定义,使用方便、移植性能高

weixin_52849254的博客 2302

STM32硬件SPI驱动ADS1255/1256避坑指南:从Cube MX配置到稳定采样实战

本文详细解析了使用STM32硬件SPI驱动高精度ADC芯片ADS1255/1256的完整流程与关键陷阱。重点阐述了Cube MX中SPI模式(必须为CPOL=1, CPHA=1)、数据帧格式(MSB First)及波特率(建议从256kHz起)的正确配置,并提供了分步读写时序的代码实现与逻辑分析仪调试方法,帮助开发者避开常见坑点,实现稳定可靠的高精度数据采样。

weixin_29193259的博客 358

设计模式(3)之七大原则之依赖倒转

一、定义 依赖倒置原则的原始定义为: 高层模块不应该依赖低层模块,两者都应该依赖其抽象; 抽象不应该依赖细节,细节应该依赖抽象; 依赖倒装的中心思想就是:面向接口编程; 依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。他的设计理念是这样子的,相对于细节的多变性,抽象的东西要稳定得多。以抽象为基础的架构比以细节搭建的架构要稳定得多。在java中,抽象指的就是接口或者是抽象类,细节就是具体的实现类。 使用接口或者抽象类的目的...

jokeMqc的博客 609

Clion+platformIO开发ESP32时找不到lib文件中引入第三方库的头文件(头文件下有波浪线),实际编译是成功的解决方法

Clion+platformIO开发ESP引入第三方库文件编译器无法找到.h文件但编译成功

zs5218的博客 1852

什么是依赖倒置原则

依赖倒置原则(Dependency Inversion Principle,DIP)是指高层模块不应该依赖于低层模块,它们都应该依赖于抽象。换句话说,具体类之间的依赖关系应该尽可能减少,而抽象类或接口之间的依赖关系应该尽可能增加。这个原则的核心思想是将依赖关系从具体的实现类转移到抽象类或接口上。通过这种方式,高层模块和低层模块都可以依赖于抽象,而不是依赖于具体的实现类。降低耦合性:具体类之间的依赖关系减少,可以降低代码之间的耦合性,使得代码更加灵活和可维护。

qq_39406460的博客 1625

Qwen2.5-VL模型微调实战:从零到部署的完整流程(附避坑指南)

本文详细介绍了Qwen2.5-VL视觉语言模型从零开始的完整微调与部署流程。内容涵盖使用LLaMA-Factory进行LoRA微调的关键参数配置与避坑指南,以及如何将训练好的模型权重合并,并最终利用vLLM高性能推理引擎进行部署,为开发者提供了一套可落地的实战方案。

oo7890的博客 591

ThingsBoard PE专业版解决方案技术文档——温度&湿度

温湿度解决方案

weixin_67440240的博客 818

六大设计原则之「依赖倒置原则(Dependence Inversion Principle)」

六大设计原则 单一职责原则 里式替换原则 依赖导致原则 接口隔离原则 迪米特原则 开闭原则 依赖倒置原则 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 解決方法:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率 示例: class Newspaper implements IReader { public String getContent(){ ret

梦想不会灭 337

fanuc机器人I/O分配

FANUC机器人在和其他外部设备进行通讯时,需要对信号进行配置。 在机器人处于UOP自动分配状态时,系统会自动检索已配对设备,并分配相应的机架号。 当我们需要手动对信号进行分配时,可参考以下机架号进行配置。 不同的通讯协议对应的机架号不同,外部通讯协议常用的机架号参考下表: 序号 机架号 通讯类型 1 0 Process I/O 2 1-15

haier123888的博客 1万+

二、设计原则之依赖倒置原则

今天的博客主题 设计原则和模式--》设计原则之依赖倒置原则 依赖倒置原则 DIP (Dependence Inversion Principle ) 是说在设计代码结构的时候,高层模块不应该依赖底层模块,二者都应该依赖于抽象。 抽象不依赖细节,细节依赖于抽象。 这样可以减少类与类之间的耦合性,能提高系统的稳定性,提高代码可读性与可维护性,降低修改程序造成的风险。...

小萝卜.的博客 176

【62】OpenCV C++实战篇——【项目实战】OpenCV C++ 精准定位“十字刻度尺”中心坐标,过滤图片中的干扰,精准获取十字交点坐标

本文针对工业相机拍摄的2000万像素图像中十字刻度尺的精确定位问题进行了研究。面对图像较暗、存在红黄干扰、记号笔涂抹及细节模糊等难点,提出了一种基于霍夫变换的解决方案。通过灰度化、反色、二值化预处理后,对比分析了多尺度霍夫直线(HoughLines)和渐进概率霍夫线段(HoughLinesP)两种方法的定位效果。实验结果表明,HoughLinesP由于具有最小线段长度和间隙约束,在直线贴合度和交点定位精度上表现更优,其返回的线段端点坐标也更便于后续处理。该研究为工业视觉中微小目标的精确定位提供了实用参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 975

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OOD设计原则之依赖倒置原则(DIP)

依赖倒置原则(Dependency-Inversion Principle)是Robert C. Martin(!)在1996年为《C++ Reporter》所写的专栏Engineering Notebook的第三篇(原文),后来加入到他在2002年出版的经典著作《Agile Software Development Principles Patterns and Practices》 中提到的,

Brookes的专栏 3235

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

设计原则之三:依赖倒置原则(DIP)

内容待续……

哭着出生,笑着死去 187

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

设计原则(四)依赖倒置原则(DIP)

一、什么是依赖倒置原则一种表述: 抽象不应当依赖于细节;细节应当依赖于抽象。另一种表述: 要针对接口编程,不要针对实现编程。针对接口编程的意思就是说,应当使用Java接口和抽象Java类进行变量的类型声明、参量的类型声明、方法的返回类型声明,以及数据类型的转换等。不要针对实现编程的意思就是说,不应当使用具体Java类进行变量的类型声明、参量的类型声明、方法的返回类型声明,以及数据类型的转换等。二

xingjiarong的专栏 6681

设计原则 - 依赖倒置原则(DIP)

依赖倒置原则 依赖倒置原则(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.D...

欢迎来到Jack的程序世界 777

【设计模式】设计原则:DIP 依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。 通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所造成的风险。接下来看一个案例,还是以课程为例,先来创建一个类 Jack: public class Jack { public void studyJavaCourse(){ System.o

A minor 862

【iOS-设计模式】六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)...

定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖细节;细节应该依赖抽象。 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原子操作的模块),两者都应该依赖于抽象。我们平时常说的“针对接口编程,不要针对实现编程”就是依赖倒转原则的最好体现:接口(也可以是抽象类)就是一种抽象,只要不修改接口声明,大家可以放心大...

GSNICE 1333

六大设计原则 -依赖倒置原则【Dependence Inversion Principle】

六大设计原则 单一职责原则 里式替换原则 依赖倒置原则 接口隔离原则 迪米特原则 开闭原则 依赖倒置原则 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 解決方法:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率 代码: class Newspaper ...

阿甘兄 917

七大设计原则(三)--依赖倒置原则DIP

摘要:依赖倒置原则(DIP)要求高层模块不应依赖低层模块,二者都应依赖抽象。文中通过支付功能开发案例,展示了未遵循DIP时业务逻辑与具体支付实现强耦合的问题,以及改进后通过接口抽象实现解耦的方案。改进后的代码通过定义Payment等接口,使OrderService核心业务逻辑保持稳定,新增支付方式只需扩展具体实现类,无需修改高层模块。这种设计提高了系统的可扩展性和维护性。

万波的技术博客 375

六大设计原则(三)DIP依赖倒置原则

依赖倒置原则DIP(Dependence Inversion Principle) 依赖倒置原则的含义 高层模块不能依赖低层模块,二者都应该依赖其抽象。 抽象不应该依赖于细节。 细节应该依赖抽象。 什么是高层模块?低层模块? 每一个原子逻辑就是低层模块,原子逻辑再组就是高层模块。 什么是抽象和细节? 抽象是抽象类,不可被实例化。 细节是实现类,比如实现的接口或继承抽象类的子类,可以被实例化。 表现在Java语言中就是面向接口编程 模块间的依赖是通过抽象来实现的,具体的实现类之间不能发生直接的依赖。...

Unknowncheats的博客 170

IOS设计模式的六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)

定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖细节;细节应该依赖抽象。 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原子操作的模块),两者都应该依赖于抽象。我们平时常说的“针对接口编程,不要针对实现编程”就是依赖倒转原则的最好体现:接口(也可以是抽象类)就是一种抽象,只要不修改接口声明,大...

weixin_34126215的博客 235
上一篇: 设计原则-开闭原则
下一篇: 设计模式之静态代理
huahua.Dr
博客等级 码龄8年 87粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值