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. centOS7服务管理与启动流程

    centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 ...

  2. java类成员的访问权限

    private:这是安全级别最高的访问权限,尽在该类中可以访问到: 默认访问权限:又称包访问权限,顾名思义,仅在该包内可以访问: protected:在包访问权限的基础上,该类的子类也可以访问到: p ...

  3. angular directive自定义指令

    先来看一下自定义指令的写法 app.directive('', ['', function(){ // Runs during compile return { // name: '', // pri ...

  4. 51nod 1393 0和1相等串 思路 : map存前缀和

    题目: 思路:把'0'当成数字-1,'1'当成数字1,求前缀和,用map更新当前前缀和最早出现的位置.(用map而不用数组是因为可能会出现负数) 当前缀和的值之前出现过,比如i = 10时,sum = ...

  5. netty4.x 传输文件

    一:简介 netty传输文件的例子并不多,当前的项目刚才需要使用netty,所以就记录一下使用方法,使用netty传输文件,首先需要启动一个服务端,等待服务端请求监听,然后传输文件的时候,启动一个客户 ...

  6. hdu4704 Sum 2013 Multi-University Training Contest 10 数论题

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

  7. sqlserver 缩小表空间

    1. 保留需要的数据之新表中->TRUNCATE原表数据->还原之前保留的数据之原表中->压缩表空间 脚本类似如下 SELECT * INTO #keep FROM Original ...

  8. 管中窥豹——从OVS看SDN

    网络虚拟化是当前云计算最重要的特点之一,打通租户网络之间互通以及访问控制策略,最重要的是满足租户之间的网络隔离,这才是云计算网络的特点.而SDN的产生则是在网络虚拟化中,将控制面和业务面分离,控制面只 ...

  9. 关于AVALON总线动态地址对齐

    在NIOS的使用中,我们往往要用到自定义外设,然后通过AVALON交换架构和NIOSII进行通信. AVALON总线,其实是一种交换架构的协议,在自定义外设挂在AVALON总线上时,一定要注意地址对齐 ...

  10. Python实战之网络编程socket学习笔记及简单练习

    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET IPv4(默认) socket.AF_IN ...