C++ 设计模式 依赖倒置原则 简单示例

/**
* 依赖倒置原则(Dependency Inversion Principle)
* 依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。
*
*/ #include <iostream> class HardDisk
{
public:
virtual void work() = ;
virtual ~HardDisk() {}
}; class Memory
{
public:
virtual void work() = ;
virtual ~Memory() {}
}; class CPU
{
public:
virtual void work() = ;
virtual ~CPU() {}
}; 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:
virtual void work() override
{
std::cout << "我是Inter CPU 我工作良好" << std::endl;
}
}; class AMDCPU: public CPU
{
public:
virtual void work() override
{
std::cout << "我是AMD CPU 我工作良好" << std::endl;
}
}; class KingstomMemory: public Memory
{
public:
virtual void work() override
{
std::cout << "我是Kingstom Memory 我工作良好" << std::endl;
}
}; class SamsungMemory: public Memory
{
public:
virtual void work() override
{
std::cout << "我是Samsung Memory 我工作良好" << std::endl;
}
}; class WDHardDisk: public HardDisk
{
public:
virtual void work() override
{
std::cout << "我是WD HardDisk 我工作良好" << std::endl;
}
}; class STHardDisk: public HardDisk
{
public:
virtual void work() override
{
std::cout << "我是ST HardDisk 我工作良好" << std::endl;
}
}; void DIP_test()
{
HardDisk * harddisk = nullptr;
Memory * memory = nullptr;
CPU * cpu = nullptr;
Computer * mycomputer = nullptr; harddisk = new WDHardDisk;
memory = new KingstomMemory;
cpu = new InterCPU; std::cout << "---------->>>" << std::endl;
mycomputer = new Computer(harddisk, memory, cpu);
mycomputer->work();
delete mycomputer;
mycomputer = nullptr;
delete cpu;
cpu = nullptr;
delete memory;
memory = nullptr;
delete harddisk;
harddisk = nullptr;
std::cout << "<<<----------" << std::endl; harddisk = new STHardDisk;
memory = new SamsungMemory;
cpu = new AMDCPU; std::cout << "---------->>>" << std::endl;
mycomputer = new Computer(harddisk, memory, cpu);
mycomputer->work();
delete mycomputer;
mycomputer = nullptr;
delete cpu;
cpu = nullptr;
delete memory;
memory = nullptr;
delete harddisk;
harddisk = nullptr;
std::cout << "<<<----------" << std::endl; return;
} int main()
{
DIP_test(); system("pause");
return ;
}

C++ 设计模式 依赖倒置原则 简单示例的更多相关文章

  1. C++ 设计模式 开放封闭原则 简单示例

    C++ 设计模式 开放封闭原则 简单示例 开放封闭原则(Open Closed Principle)描述 符合开放封闭原则的模块都有两个主要特性: 1. 它们 "面向扩展开放(Open Fo ...

  2. 设计模式——依赖倒置原则实例(PHP实现)

    <?php /** * 设计模式--依赖倒置原则实例 * Created by DannyWang * jue.wang@yulore.com * 2015-05-05 */ abstract ...

  3. 依赖倒置原则(Dependence Inversion Principle)

    目录 背景 说明 例子 "倒置"的解释 总结 参考资料 背景 这几天组内的人一起学习DDD,里面再次提到了依赖倒置原则,在这学习过程中,大家又讨论了一下依赖倒置原则. 说明 采用依 ...

  4. 北风设计模式课程---依赖倒置原则(Dependency Inversion Principle)

    北风设计模式课程---依赖倒置原则(Dependency Inversion Principle) 一.总结 一句话总结: 面向对象技术的根基:依赖倒置原则(Dependency Inversion ...

  5. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...

  6. 《设计模式》-原则三:依赖倒置原则(DIP)

    这几天晚上回来都去玩了!没有坚持学习.真的好惭愧! 非常自责 后面一定要坚持 一气呵成  争取每天学一点,把这个学完. 今天主要是看了一下  设计模式中的 原则三: 依赖倒置原则(DIP) 官方是这样 ...

  7. zt 设计模式六大原则(3):依赖倒置原则

    下面说法对不对? 父类将算法(逻辑)封装起来,子类实现细节:这个就叫DIP(依赖倒置:Dependency Inversion Principles),模板模式就是这个原则的实现.如果在父类中加一个t ...

  8. Java设计模式(2:单一职责原则和依赖倒置原则详解)

    一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...

  9. 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)

      定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...

随机推荐

  1. JVM菜鸟进阶高手之路八(一些细节)

    转载请注明原创出处,谢谢! gc日志问题 查看docker环境的gc日志,发现是下面这种情况,很奇怪,一直怀疑是docker环境那里是否有点问题,并没有怀疑配置,之前物理机上面的gc日志都是正常那种. ...

  2. ACM学习之路___HDU 1385(带路径保存的 Floyd)

    Description These are N cities in Spring country. Between each pair of cities there may be one trans ...

  3. jQuery自定义插件--banner图滚动

    前言 jQuery是一个功能强大的库,提供了开发JavaScript项目所需的所有核心函数.很多时候我们使用jQuery的原因就是因为其使用插件的功能,然而,有时候我们还是需要使用自定义代码来扩展这些 ...

  4. Java多线程Runnable与Callable区别与拓展

    我们先来分别看一下这两个接口 Runnable: // // Source code recreated from a .class file by IntelliJ IDEA // (powered ...

  5. day01:study HTTP协议

    总结: 1.对web客户端和web服务器之间的通讯有了基本原理有了简单理解. 2.对http协议有了相关概念的建立 3.B/S C/S 两种形式 4.搭建tomcat服务器的环境,相关配置(虚拟目录 ...

  6. __无标题栏的窗口拖动___javafx

    遇到困难::添加mouseevent监听,我用的mouse_DragedDetected配合MouseEvent.Pressed,,闪的不行,后来借鉴swing的pressed,move,releas ...

  7. ssm搭建报错

    在搭建ssm框架时候踩得坑:1.对于拦截器url-parttern的设置:第一次设置的是/** 本以为这个是表示拦截所有,没想到这是错误的写法,正确的写法是/    启动项目不会报错,但是会出现404 ...

  8. 【JDK1.8】Java 8源码阅读汇总

    一.前言 ​ 万丈高楼平地起,相信要想学好java,仅仅掌握基础的语法是远远不够的,从今天起,笔者将和园友们一起阅读jdk1.8的源码,并将阅读重点放在常见的诸如collection集合以及concu ...

  9. win10 uwp 绘图 Line 控件使用

    本文主要讲一个在绘图中,我们会有一个基础的控件,Line.控件的基本使用和他能做出的我们很多时候需要的界面. 虽然是一个简单控件,但是可以做出很诡异的很好看的UI. 首先,我们要知道,Line就是画直 ...

  10. 【Windows 10 应用开发】使用x:Bind标记动态获得计算结果

    UWP 在传统(WPF)的Binding标记上引入了 Bind 标记,Bind 基于编译阶段生成,因而具有较高的性能.但是,你得注意,这个性能上的优化是免去了运行阶段动态绑定的开销,这是不包括数据源的 ...