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

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

概念

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

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

使用

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

依赖倒置原则建议采用以下方式设计:

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

示例

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

要解决这个问题,你可以创建一个描述读写操作的高层接口,并让报告类使用该接口代替低层次的类。然后你可以修改或扩展低层次的原始类来实现业务逻辑声明的读写接口。

其结果是原始的依赖关系被倒置:现在低层次的类依赖于高层次的抽象。

相关推荐
晓风残月淡1 天前
系统架构设计师:设计模式——结构型设计模式
设计模式·系统架构
Wabi_sabi_x1 天前
C++设计模式:面向对象的八大设计原则之一
开发语言·c++·设计模式
智驾1 天前
C++,设计模式,【建造者模式】
c++·设计模式·建造者模式
Wabi_sabi_x1 天前
C++设计模式:面向对象的八大设计原则之三
开发语言·c++·设计模式
Wabi_sabi_x2 天前
C++设计模式:面向对象的八大设计原则之四
开发语言·c++·设计模式
jz_ddk2 天前
[方法论]软件工程中的设计模式:从理论到实践的深度解析
设计模式·软件工程
wjm0410062 天前
C++八股--5--设计模式--适配器模式,代理模式,观察者模式
c++·设计模式·适配器模式
wjm0410062 天前
C++八股--three day --设计模式之单例和工厂
c++·单例模式·设计模式
晓风残月淡2 天前
系统架构设计师:设计模式——创建型设计模式
设计模式·系统架构
常某某的好奇心2 天前
开闭原则与依赖倒置原则区别:原类不变,新增类(功能)vs 接口类不变,原实现类可变
依赖倒置原则·开闭原则