首页 > 其他分享 >面向对象的设计原则--依赖倒置原则

面向对象的设计原则--依赖倒置原则

时间:2024-08-23 09:51:25浏览次数:13  
标签:原则 -- 低层 高层 接口 面向对象 抽象 模块 实现

依赖倒置原则

这是面向对象设计中非常重要的一个原则,它是SOLID原则中的一个,SOLID代表了五个设计原则的首字母缩写,用于指导开发者编写可维护和可扩展的代码。

以下是依赖倒置原则的详细解释:

抽象不应该依赖于细节,细节应该依赖于抽象

这意味着在设计中,我们应该尽量让高层模块(如业务逻辑模块)和低层模块(如数据库访问、文件操作等)都依赖于抽象(如接口或抽象类),而不是让高层模块直接依赖于低层模块的具体实现。这样做的好处是:

  • 提高系统的可维护性:当低层模块的具体实现发生变化时,只要抽象层保持不变,高层模块就不需要做任何修改。
  • 提高系统的可扩展性:当需要替换低层模块的实现时,只需提供一个新的实现,只要它遵循同样的抽象接口,高层模块就可以无缝切换,无需修改。

高层模块与低层模块

  • 高层模块:指的是系统中负责业务逻辑的部分,通常不涉及具体的实现细节。
  • 低层模块:指的是实现了具体功能的部分,例如数据库操作、API调用等。

如何应用依赖倒置原则

  1. 定义接口或抽象类:首先定义高层模块和低层模块之间的抽象接口或抽象类。
  2. 高层模块依赖于抽象:编写高层模块时,让它依赖于这些抽象,而不是具体的实现。
  3. 低层模块实现抽象:编写低层模块时,实现这些抽象接口或抽象类。
  4. 依赖注入:在实际运行时,通过构造函数、方法或属性将低层模块的具体实现注入到高层模块中。

示例

以邮件发送功能为例,按照依赖倒置原则:

  • 定义一个IMailService接口,它包含发送邮件的抽象方法。
  • 高层模块(比如用户注册功能)依赖于IMailService接口,而不是具体的邮件发送实现。
  • 实现一个或多个具体的邮件发送类,比如SmtpMailServiceSendGridMailService等,它们实现IMailService接口。
  • 在系统配置或运行时,将具体的邮件发送服务(如SmtpMailService的实例)注入到高层模块中。

通过这种方式,如果未来需要更换邮件发送服务提供商,只需提供一个新的实现类,无需修改高层模块的代码,从而实现了高层模块和低层模块的解耦。

标签:原则,--,低层,高层,接口,面向对象,抽象,模块,实现
From: https://blog.csdn.net/linkedin_21843693/article/details/141358652

相关文章

  • CDGA|数据治理:解锁各行业数据驱动业务发展的新篇章
    在当今这个数字化时代,数据已成为企业最宝贵的资产之一,其蕴含的价值远超传统资源。有效的数据治理不仅能够帮助企业提升运营效率、优化决策过程,还能驱动业务创新,为企业在激烈的市场竞争中赢得先机。本文将探讨不同行业如何利用数据治理策略来驱动业务发展,展现数据作为核心驱动力......
  • 慢 SQL 是如何拖垮数据库的?
    案发现场上午9:49,应用报警:错误码4103.ERR_ATOM_CONNECTION_POOL_FULL,提示数据库连接池已满。在上午9:49至10:08的这段时间内,又陆续接收到了多个数据库异常报警,包括4200.ERR_GROUP_NOT_AVAILABLE、4201.ERR_GROUP_NO_ATOM_AVAILABLE以及4202.ERR_SQL_QUERY_TIMEOUT等。鉴于数据......
  • windows配置zed2相机环境
    准备工作1.确保电脑有独立显卡    如图,可以看到示例计算机中,有AMD独立显卡,而Intel为集成显卡。如果这里除了Intel集成显卡外,没有AMD、NVIDIA或者其他品牌显卡,则该计算机不是独显。2.安装anconda来创建zed环境     创建python=3.7的环境进行zed相机调试......
  • 在MES系统的基础上,电子制造企业如何提高计划排产的准确度
    在咨询我司APS计划排程解决方案的客户群体中,电子制造行业的客户的占比高达65%,究其原因是国内电子制造企业大多面临的是小批量、多品种、多非标订单生产模式,而电子产品本身还具有多SKU、替代料号多、工序复杂的情况。为了保障订单准时交付率和质检合格率,越来越多的电子制造企业开......
  • Infisical怎么在Jenkins内调用
    参考https://infisical.com/docs/integrations/cicd/jenkins#jenkins-pluginJenkins参考https://plugins.jenkins.io/infisical/前提条件安装配置infisical设置了项目和密钥Infisical创建身份认证创建身份AccessControl->MachineIdentities->Createidentify......
  • 慢 SQL 是如何拖垮数据库的?
    案发现场上午9:49,应用报警:错误码4103.ERR_ATOM_CONNECTION_POOL_FULL,提示数据库连接池已满。在上午9:49至10:08的这段时间内,又陆续接收到了多个数据库异常报警,包括4200.ERR_GROUP_NOT_AVAILABLE、4201.ERR_GROUP_NO_ATOM_AVAILABLE以及4202.ERR_SQL_QUERY_TIMEOUT等。鉴于数据......
  • RE入门第一天---IDA的使用
    一.什么是IDA以及安装​IDA全称是交互式反汇编器专业版(InteractiveDisassemblerProfessional),人们其简称为IDA,是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDAPro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windo......
  • rancher 篇
    rancher磁盘负载警告问题原因:在查看pod运行状态时,发现有的pod的状态是Evicted,通过describe去查看发现了Thenodehadcondition:[DiskPressure].的报错原因是kubelet检测到本地磁盘使用率超过了85%,这是kubelet的默认配置查看根目录下(/)使用率是否超过85%。......
  • 公司最大的内卷,偷偷做单元测试
    一位读者在看过我的《理解这八大优势,才算精通单元测试》后,问我:知道单元测试有好处,但实在没空写。看完文章后又想重新落实一下,有没有啥写好单元测试的技巧?这位读者绝对不是第一个和我抱怨单元测试的人。这很好理解,中国互联网公司太多太卷,想要抢夺市场就要推出不同功能,而这些压力一......
  • P[ostgreSQL16在Windows下安装
    1.官网下载安装包并安装2.安装时遇到问题Problemrunningpost-installstep.Installationmaynotcompletecorrectlty.Thedatabaseclusterinitialisationfailed.解决方法:安装完成后管理员启动cmd,cd到pg的bin目录输入D:\PostgreSQL\bin>initdb.exe-DD:\database......