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

腾讯研发工程师笔试题解析:从链表到TCP的经典考点与刷题策略 链表操作、TCP握手、哈希冲突与进程调度,是研发岗位笔试中反复出现的核心基础。理解这些概念的底层原理,比死记答案更重要:链表判环的快慢指针为何必然相遇,TCP握手失败后的重传机制如何工作,哈希冲突的常见处理策略怎样权衡。这些知识不仅决定了笔试成绩,更直接影响后续工程实践中的性能分析与问题排查。在校招场景中,系统梳理数据结构、操作系统、计算机网络与C/C++基础,并通过经典模拟题进行限时训练,是快速提升应试能力的有效路径。以一套腾讯研发工程师在线模拟笔试题为样本,逐层拆解高频考点与易错点,既能检验当前知识体系 阅读详情

依赖颠倒原则

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

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

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

没有使用依赖颠倒之前,上层业务逻辑依赖底层业务逻辑
在这里插入图片描述
依赖颠倒原则
使用了依赖颠倒之后,上层业务逻辑和底层模块都依赖于抽象层,代码复杂了,但是系统易于维护了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sKc9bte-1602069982108)(picture/image-20201007185357740.png)]

依赖颠倒的实现也是基于多态的基础之上,,具体的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++依赖倒置原则的简单实现 依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。表现在具体程序中,常用的方法为设置中间层(架空层)接口,而后底层类实现中间层接口,顶层类调用中间层方法。顶层和底层之间实现隔离,降低了顶级类和底层类之间的耦合(或为客户与实现模块之间)。 (图) 对于依赖倒置原则完成了一个简单实现:底层包括keyboard和monitor(负责输... 阅读详情

相关推荐

Hadoop实战:用MapReduce分析YouTube视频数据集(附完整代码)

本文提供了一个完整的Hadoop MapReduce实战教程,指导读者使用MapReduce框架分析YouTube视频数据集,统计不同视频类别的数量分布。教程涵盖从数据获取、预处理、HDFS操作到Java代码编写、作业提交及结果可视化的全流程,并附有完整代码,帮助开发者深入理解分布式计算思想。

lilh34434的博客 198

【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )

一、依赖倒置原则简介、 二、面向实现编程代码示例 ( 反面示例 )、 1、顾客类、 2、测试类、 三、依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 )、 1、顾客类、 2、商品接口、 3、冰箱商品、 4、电视商品、 5、测试类、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2848

保姆级教程:手把手教你用记事本修改DNF私服PVF,打造毕业级自定义装备

本文提供了一份详细的DNF私服PVF文件修改教程,教你如何使用记事本轻松打造毕业级自定义装备。从PVF文件结构解析到基础属性修改,再到高级特效设置,手把手教你实现装备属性的全方位定制,无需编程基础即可完成。

weixin_42525385的博客 1191

依赖倒转原则(C++)

概念     高层模块不应依赖低层模块,低层模块也不应依赖高层模块,两个都应该依赖抽象层。抽象不应该依赖细节,细节应该依赖抽象。 简述     依赖倒置原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降

先锋小牛 3083

华为/H3C/锐捷交换机配置命令对比表:一张图搞定VLAN划分与端口设置

本文详细对比了华为、H3C、锐捷三大品牌交换机在VLAN划分与端口设置中的配置命令差异,提供从基础配置到高级功能的横向对比表,帮助网络工程师快速掌握多品牌设备混用环境下的配置技巧,提升工作效率。

rust6ferris的博客 699

卡尔曼滤波五步拆解:用Excel手推姿态解算全过程

本文通过Excel手推演示,详细拆解了卡尔曼滤波在姿态解算中的五步核心流程。文章以融合陀螺仪与加速度计数据估算角度为例,从状态预测、协方差更新到增益计算,逐步展示如何将抽象的矩阵运算转化为可视化的表格计算,帮助读者直观理解滤波器的“预测-修正”机制,并为算法实现与参数调优提供清晰指导。

hhh00的博客 978

【C++设计模式】依赖倒转原则

依赖倒转原则(Dependency Inversion Principle,DIP)是面向对象设计中的一个基本原则。

m0_61629312的博客 1293

聚类教程:cisTopic——来自单细胞表观基因组学数据的顺式调控主题的概率建模

之前运行这步的时候报错了如下: 后来发现原因是Ubuntu自动把R包更新到4.2版本,但是Rstudio版本没有更新,更新Rstudio即可,更新Rstudio的教程看此教程:。

watermel__的博客 1051

C++设计模式[1]--控制反转与依赖注入

在采用依赖注入实现的 Notification 类中,虽然我们不需要用类似 hard code 的方式,在类内部通过 new 来创建 MessageSender 对象,但是,这个创建对象、组装(或注入)对象的工作仅仅是被移动到了更上层代码而已,还是需要我们程序员自己来实现。概括就是:不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。对象创建和依赖注入的工作,本身跟具体的业务无关,我们完全可以抽象成框架来自动完成。

m0_69957190的博客 727

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

对pycaret的使用流程进行梳理,并详细介绍了基于多分类预测的案例

lys_828的博客 780

Android 13 wificond讲解

Android 13 wificond讲解

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 2932

C++ 依赖倒置示例

interface.h #include <iostream> using namespace std; #ifndef INTERFACE_H__ #define INTERFACE_H__ class IProduct { public: virtual void print() = 0; }; class IFactory { public: virtua...

EdwardOrchis的专栏 421

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

23种设计模式C++实现UML+源码汇总

设计模式-汇总 代码开源仓库地址 23种设计模式C++实现 C++中的开闭原则使用C++多态功能实现附源码 C++基于多态实现依赖颠倒原则附源码 C++ 的静态成员变量为什么一定要在类外定义 23种设计模式C++源码与UML实现–单例模式中的饿汉模式和懒汉模式 c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking) 23种设计模式C++源码与UML实现–简单工厂模式 23种设计模式C++源码与UML实现–工厂模式 23种设计模式C++源码与UML实现–代理模式

andrewbytecoder 2087

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c++ 设计模式汇总

设计模式-汇总 代码开源仓库地址 23种设计模式C++实现 C++中的开闭原则使用C++多态功能实现附源码 C++基于多态实现依赖颠倒原则附源码 C++ 的静态成员变量为什么一定要在类外定义 23种设计模式C++源码与UML实现–单例模式中的饿汉模式和懒汉模式 c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking) 23种设计模式C++源码与UML实现–简单工厂模式 23种设计模式C++源码与UML实现–工厂模式 23种设计模式C++源码与UML实现–代理模式

VCMamba的博客 350

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux系列文章

linux文章汇总 VIM bash Makefile uboot u-boot编译过程分析 linux Linux系统编程 Linux/UNIX网络编程

andrewbytecoder 1154

147.【2024Java八股-全网最全-10w字】

eg: 学校、院校、经验、年龄、跳槽频率…基本包括16种常见使用场景: 、数据共享分布式、、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.详细讲解16种使用场景: https://blog.youkuaiyun.com/zxl646801924/article/details/123202381用户使用id进行查询文章的时候,首先会查询redis数据库,如果在redis中命中数据,那么redis就向用户返回查询的结果

qq_69683957的博客 1736

Java 基础

Java 基础 1、面向对象编程有哪些特征? 2、JDK 与 JRE 的区别是什么? 3、Java 有哪几种基本数据类型? 4、== 和 equals 比较有什么区别? 5、public,private,protected,默认的区别? 6、this 和 super 有什么区别? 7、short s1 = 1; s1 += 1;有错吗? 8、short s1 = 1; s1 = s1 + 1;有错吗? 9、float n = 1.8 有错吗? 10、i++ 和 ++i 的区别? 11、while 和 do

weixin_43964191的博客 403

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

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

关于依赖倒转原则,对应的是两条非常抽象的描述:1.高层模块不应该依赖低层模块,两个都应该依赖抽象。2.抽象不应该依赖细节,细节应该依赖抽象。

weixin_42097108的博客 1015

架构设计中依赖反转的学习心得

分享一点博主在自学架构过程中关于依赖反转的心得体会

Timor_lxl的博客 313

C++依赖倒转原则

C++依赖倒转原则 #include <iostream> using namespace std; class Business { public: virtual void GeneralService() = 0; }; class TransferAccounts :public Business//办理转账业务 { public : void GeneralSer...

weixin_44567289的博客 429

C++ 设计模式依赖倒转模式设计

利用中层业务模块放抽象类的指针 #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; // 银行工作人员 class AbstractWorker { public: virtual void doBusiness() = 0; }; // 专门办理存款业务的工作人员 class SaveBankWork...

wwxy1995的博客 297

c++依赖倒置原则

C++依赖倒置原则

miracle 2750

软件里的依赖倒转原则

        软件的设计模式中,有个依赖倒转原则(Dependence Inversion Principle,DIP),比较实用,下面介绍它。         一、依赖倒转原则的定义         依赖抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。 &nbsp...

sanqima的专栏 260

依赖倒置其实就是多态?

依赖倒置其实就是多态? 转载于:https://my.oschina.net/u/1413423/blog/706548

295
上一篇: C++中的开闭原则使用C++多态功能实现附源码
下一篇: C++ 的静态成员变量为什么一定要在类外定义
andrewbytecoder
andrewbytecoder 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 3476粉丝 687原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andrewbytecoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值