【10】c++设计模式——>依赖倒转原则

关于依赖倒转原则,对应的是两条非常抽象的描述:

1.高层模块不应该依赖低层模块,两个都应该依赖抽象。

2.抽象不应该依赖细节,细节应该依赖抽象。

先用人话解释一下这两句话中的一些抽象概念:

1.高层模块:可以理解为上层应用,就是业务层的实现

2.低层模块:可以理解为底层接口,比如封装好的API、动态库等

3.抽象:指的就是抽象类或者接口,在C++中没有接口,只有抽象类

先举一个高层模块依赖低层模块的例子:

大聪明的项目组接了一个新项目,低层使用的是MySql的数据库接口,高层基于这套接口对数据库表进行了添删查改,实现了对业务层数据的处理。而后由于某些原因,要存储到数据库的数据量暴增,所以更换了Oracle数据库,由于低层的数据库接口变了,高层代码的数据库操作部分是直接调用了低层的接口,因此也需要进行对应的修改,无法实现对高层代码的直接复用,大聪明欲哭无泪。

我们可以设计一个抽象类,一个子类用作MySql接口,另一个子类用作Oracle接口。

抽象类中提供的接口是固定不变的,底层模块是抽象类的子类,继承了抽象类的接口,并且可以重写这些接口的行为;高层模块想要实现某些功能,调用的是抽象类的函数接口,并且是通过抽象类的父类指针引用其子类的实例对象(用子类类型替换父类类型),这样就实现了多态。

基于依赖倒转原则将项目的结构换成上图的这种模式之后,低层模块发生变化,对应高层模块是没有任何影响的,这样程序猿的工作量降低了,代码也更容易维护(说白了,依赖倒转原则就是对多态的典型应用)。

里式转换原则

所谓里式转换原则就是子类必须能够替换掉他们的父类类型。比如父类定义一个人的类型,会飞,会游泳,身高180cm,那么子类就不能是武大郎,土行孙,因为身高不满足。

相关推荐
feifeigo1239 分钟前
matlab电力系统重构实现
开发语言·matlab·重构
小c君tt13 分钟前
QT笔记记录
开发语言·笔记·qt
布朗克16817 分钟前
Go 入门到精通-08-复合类型之数组与切片
开发语言·后端·golang·数组与切片
AI人工智能+电脑小能手32 分钟前
【大白话说Java面试题 第151题】【06_Spring篇】第11题:说一下 Spring Bean 的生命周期?
java·开发语言·后端·spring·面试
weixin_4235339936 分钟前
c++类的继承学习-去中心化交易所(DEX)的“流动性池初始化与交易指令”设计
c++·学习·去中心化
广州浮点FLOATLIC44 分钟前
Creo 许可证利用率怎么优化:制造企业该先看共享规则,还是先看模块占用结构
java·开发语言
wuyk5551 小时前
21. 嵌入式面试避坑指南:sizeof 是关键字,不是函数!
c语言·开发语言·stm32·单片机·嵌入式硬件
2601_962440841 小时前
计算机毕业设计之jsp教室管理系统
java·开发语言·笔记·分布式·算法·课程设计·推荐算法
unicrom_深圳市由你创科技4 小时前
数据库用SQLite还是SQL Server?工业数据存储选哪个?
c++
郝学胜_神的一滴4 小时前
CMake 037:宏传递流转机制与C++编译特性跨平台适配指南
c++·cmake