依赖颠倒原则

关于多态的实现原理以及实例见前几天更新的C++多态一文:
C++多态

使用依赖颠倒原则之后,虽然代码实现比原来更加复杂了,但是实现了高层业务逻辑层与底层模块之间的解耦合,更改或者更换底层模块不在需要改动高层模块的代码就可以实现,整个系统的更加的稳定。

传统的过程式设计倾向于使用高层的模块依赖低层次的模块,抽象层依赖于具体层

没有使用依赖颠倒之前,上层业务逻辑依赖底层业务逻辑

依赖颠倒原则
使用了依赖颠倒之后,上层业务逻辑和底层模块都依赖于抽象层,代码复杂了,但是系统易于维护了

依赖颠倒的实现也是基于多态的基础之上,,具体的Cpp代码实现如下:

#include <iostream>
using namespace std;// 让computer框架和具体的厂商 进行解耦合
// 1. 定义虚类,主要目的是为了规定后期子类的行为
class HardDisk
{public:virtual void work(void) = 0;
};class Memory
{public:virtual void work(void) = 0;
};class Cpu
{public:virtual void work(void) = 0;
};class Computer
{public:Computer(HardDisk *hardDisk, Memory *memory, Cpu *cpu){m_hardDisk = hardDisk;m_memory = memory;m_cpu = cpu;}void work(){m_hardDisk->work();m_memory->work();m_cpu->work();}private:HardDisk *m_hardDisk;Memory *m_memory;Cpu *m_cpu;
};class InterCpu : public Cpu
{public:void work(void){cout << "inter cpu work status ok." << endl;}
};class XSDisk : public HardDisk
{public:void work(void){cout << "xs data work status ok." << endl;}};class KingStonMemory : public Memory
{public:void work(void){cout << "KingSton memory status is ok." << endl;}
};int main(int argc, char const *argv[])
{// 基于多态实现依赖颠倒HardDisk *hardDisk = NULL;Memory *memory = NULL;Cpu *cpu = NULL;hardDisk = new XSDisk;memory = new KingStonMemory;cpu = new InterCpu;Computer *myComputer = new Computer(hardDisk, memory, cpu);myComputer->work();delete myComputer;delete cpu;delete memory;delete hardDisk;cout << "hello world." << endl;return 0;
}

执行结果:

xs data work status ok.
KingSton memory status is ok.
inter cpu work status ok.
hello world.

C++基于多态实现依赖颠倒原则附源码相关推荐

  1. 基于Simulink雷达系统建模仿真(附源码)

    目录 一.系统架构 二.运行结果 2.1示例模拟 2.2 天线增益/方向的影响 2.3 接收器 LO 上的相位噪声使能 2.4 相位噪声的影响 三.源码 此示例显示如何设置由发射器.带目标的信道和接收 ...

  2. 基于Simulink宽带单基地雷达系统仿真(附源码)

    目录 一.探索示例 1.1 收发器 1.2 信号处理子系统 1.3 渠道 1.4 目标子系统 二.结果和显示 三.总结 四.程序 本示例演示如何仿真宽带雷达系统.当雷达系统的带宽超过系统中心频率的5% ...

  3. 源码系列:基于FPGA的PS2通信电路设计(附源码)

    今天给大侠带来基于FPGA的PS2通信电路设计,附源码,获取源码,请在"FPGA技术江湖"公众号内回复"PS2源码",可获取源码文件.话不多说,上货. 设计背景 ...

  4. 基于SpringBoot的健身房管理系统【附源码】

    基于SSM的校园点餐外卖配送系统(点餐系统.外卖系统.配送系统) 开发语言:Java 数据库:MySQL 技术:Spring+SpringMVC+MyBatis+ElementUI 工具:IDEA/E ...

  5. 基于LSTM的股票价格预测模型【附源码】

    导语:本文介绍了LSTM的相关内容和在股票价格预测上的应用. LSTM(Long Short Term Memory)是一种 特殊的RNN类型,同其他的RNNs相比可以更加方便地学习长期依赖关系,因此 ...

  6. 基于Java的学籍管理系统(附 源码 论文 课件)

    项目背景: 随着计算机产业的迅速发展,电子计算机已广泛的应用于信息管理.文字处理.辅助设计.辅助教学及人们的日常生活中.基于WEB的学生学籍管理系统主要是针对高校中涉及高校学生学籍管理的一系列相关工作 ...

  7. 一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进...

    一 引子 都说面向对象的4大支柱是抽象,封装,继承与多态.但是一些初涉编程的开发人员,体会不到继承与多态的妙用,本文就试以一个经典实例来诠释继承与多态的用武之地.本实例的需求来自<重构>一 ...

  8. 基于Matlab的磁力计校准(附源码)

    目录 一.理想磁力计 二.硬铁效应 三.软铁效应 四.校正技术 五.使用函数magcal 5.1 仅偏移计算 ​编辑5.2 硬铁补偿和轴缩放计算 5.3 全硬铁和软铁补偿 5.4 自动拟合 六. 结论 ...

  9. 基于JavaWeb学生成绩信息管理系统(附源码资料)-毕业设计

    1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计.或者是需要实战项目的Java开发学习者. 2. 你将收获 提供:项目源码.项目文档.数据库脚本.软件工具等所有资料(在平台的课程附件中进行 ...

最新文章

  1. jquery checkbox勾选/取消勾选的诡异问题
  2. Linux内核模块编程系列1-极简内核模块编写
  3. JdbcTemplate详解 - 2
  4. 《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希
  5. restful json_Dropwizard:轻松的RESTful JSON HTTP Web服务
  6. Spring Boot 整合Mybatis (一)
  7. java字符转为数字_Java 判断字符串能否转化为数字的三种方法
  8. 传统 JDBC 编程详解
  9. sql select 抛异常_mysql数据库及sql注入
  10. 刘强东事后首发声;拼多多入局 AI ;三星手机 CEO 承认危机 | 极客头条
  11. webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver
  12. 秦九韶算法与霍纳规则
  13. 大数据论坛圆满落幕 开启海南房地产大数据时代
  14. 【历史上的今天】9 月 13 日:计算机先驱诞生日;第一台装载硬盘的超级计算机;《超级马里奥兄弟》发布
  15. 九。温暖地待人,你才会得到意想不到的惊喜结果。
  16. 计算机一级考试瓜果产量,全国计算机等级考试一级B考试(最新样题).doc
  17. Pandas实战-DataFrame对象
  18. WOL 实现命令。(Wake On LAN - 局域网唤醒)
  19. 【巧用自带清空内存命令 一键释放内存资源】
  20. 十大管理之项目人力资源管理知识点

热门文章

  1. 别跟我说测试的坏话...
  2. [导入]请给软件企业新员工推荐书籍
  3. nyoj 174 Max Sequence(最大子串和变形)
  4. poj 1324(BFS+状态压缩)
  5. hdu - 4027 Can you answer these queries?
  6. nyist -- 组队赛(二)
  7. 使用QSerialport读取串口数据并处理
  8. [转载自简书] ASPNetCore上传大文件碰到的一些问题总结
  9. Mac终端显示 bogon的问题
  10. SpringBoot Admin 使用指南