当前位置: 首页 > news >正文

设计模式(8)——SOLID原则之依赖倒置原则

设计模式(7)——SOLID原则之依赖倒置原则

  • 概念
  • 使用
  • 示例

概念

高层次的类不应该依赖于低层次的类。两者都应该依赖于抽象接口。抽象接口不应依赖于具体实现。具体实现应该依赖于抽象接口。

  • 底层次类:实现基础操作的类(如磁盘操作、传输网络数据与操作数据库)。
  • 高层次类:包含负责的业务逻辑以指导底层次类执行特定操作。

使用

当开发新系统时,有时人们习惯先设计底层次类,然后再开发高层此类。一部分人直观认为如果低层次的类没有实现或不确定,就无法确定高层次类能实现哪些东西。如果采用了这种设计思路,那高层次类更有可能会依赖低层次类。
依赖倒置原则建议采用以下方式设计:

  1. 使用业务术语来对高层次类依赖的低层次操作接口进行描述。例如打开报表文件,业务应该调用的是openReport(file),而不是openFile()readBytes()CloseFile()等低层次类中的方法。
  2. 基于上述业务术语抽象的接口创建高层次类,而不是基于低层次类
  3. 低层次实现接口,它们将依赖业务逻辑层,从而完成了依赖倒置

示例

在本例中,高层次的预算报告类(BudgetReport)使用低层次的数据库类(MySQLDatabase)来读取和保存其数据。这意味着低层次类中的任何改变(例如当数据库服务器发布新版本时)都可能会影响到高层次的类,但高层次的类不应关注数据存储的细节。

在这里插入图片描述

要解决这个问题,你可以创建一个描述读写操作的高层接口,并让报告类使用该接口代替低层次的类。然后你可以修改或扩展低层次的原始类来实现业务逻辑声明的读写接口。
在这里插入图片描述
其结果是原始的依赖关系被倒置:现在低层次的类依赖于高层次的抽象。

相关文章:

  • 39.[前端开发-JavaScript高级]Day04-函数增强-argument-额外知识-对象增强
  • docker创建容器添加启动--restart选项
  • 复刻系列-星穹铁道 3.2 版本先行展示页
  • 前端在线工具 CodePen 和 JSFiddle
  • 智能工厂调度系统设计方案研究报告
  • 《AI大模型应知应会100篇》第15篇:大模型训练资源需求:算力、数据与成本分析
  • ConcurrentHashMap 源码分析
  • C++中 string 类及迭代器相关知识详解
  • 详解MYSQL表空间
  • 如何为您的设计应用选择高速连接器
  • Hello Java!
  • ngx_conf_read_token - events
  • CMake set_source_files_properties用法详解
  • 机械革命 无界15X MT7922 debian12 蓝牙无法使用的研究
  • 【NLP】 18. Tokenlisation 分词 BPE, WordPiece, Unigram/SentencePiece
  • 【navicat16版本安装】
  • 基于FPGA的智能垃圾桶设计-超声波测距模块-人体感应模块-舵机模块 仿真通过
  • 服务器远程端口详解
  • MySQL与Oracle深度对比
  • 如何在英文学术写作中正确使用标点符号?
  • 乌称苏梅州一公共汽车遭俄军袭击,致9死4伤
  • 《五行令》《攻守占》,2个月后国博见
  • 病愈出院、跳大神消灾也办酒,新华每日电讯:农村滥办酒席何时休
  • 消息人士称俄方反对美国代表参加俄乌直接会谈
  • 俄谈判代表团已抵达土耳其,谈判预计在莫斯科时间10时左右开始
  • 免签国+1,中乌(兹别克斯坦)互免签证协定6月生效