C++ 设计模式 依赖倒置原则 简单示例
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++ 设计模式 依赖倒置原则 简单示例的更多相关文章
- C++ 设计模式 开放封闭原则 简单示例
C++ 设计模式 开放封闭原则 简单示例 开放封闭原则(Open Closed Principle)描述 符合开放封闭原则的模块都有两个主要特性: 1. 它们 "面向扩展开放(Open Fo ...
- 设计模式——依赖倒置原则实例(PHP实现)
<?php /** * 设计模式--依赖倒置原则实例 * Created by DannyWang * jue.wang@yulore.com * 2015-05-05 */ abstract ...
- 依赖倒置原则(Dependence Inversion Principle)
目录 背景 说明 例子 "倒置"的解释 总结 参考资料 背景 这几天组内的人一起学习DDD,里面再次提到了依赖倒置原则,在这学习过程中,大家又讨论了一下依赖倒置原则. 说明 采用依 ...
- 北风设计模式课程---依赖倒置原则(Dependency Inversion Principle)
北风设计模式课程---依赖倒置原则(Dependency Inversion Principle) 一.总结 一句话总结: 面向对象技术的根基:依赖倒置原则(Dependency Inversion ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...
- 《设计模式》-原则三:依赖倒置原则(DIP)
这几天晚上回来都去玩了!没有坚持学习.真的好惭愧! 非常自责 后面一定要坚持 一气呵成 争取每天学一点,把这个学完. 今天主要是看了一下 设计模式中的 原则三: 依赖倒置原则(DIP) 官方是这样 ...
- zt 设计模式六大原则(3):依赖倒置原则
下面说法对不对? 父类将算法(逻辑)封装起来,子类实现细节:这个就叫DIP(依赖倒置:Dependency Inversion Principles),模板模式就是这个原则的实现.如果在父类中加一个t ...
- Java设计模式(2:单一职责原则和依赖倒置原则详解)
一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...
- 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...
随机推荐
- centOS7服务管理与启动流程
centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 ...
- java类成员的访问权限
private:这是安全级别最高的访问权限,尽在该类中可以访问到: 默认访问权限:又称包访问权限,顾名思义,仅在该包内可以访问: protected:在包访问权限的基础上,该类的子类也可以访问到: p ...
- angular directive自定义指令
先来看一下自定义指令的写法 app.directive('', ['', function(){ // Runs during compile return { // name: '', // pri ...
- 51nod 1393 0和1相等串 思路 : map存前缀和
题目: 思路:把'0'当成数字-1,'1'当成数字1,求前缀和,用map更新当前前缀和最早出现的位置.(用map而不用数组是因为可能会出现负数) 当前缀和的值之前出现过,比如i = 10时,sum = ...
- netty4.x 传输文件
一:简介 netty传输文件的例子并不多,当前的项目刚才需要使用netty,所以就记录一下使用方法,使用netty传输文件,首先需要启动一个服务端,等待服务端请求监听,然后传输文件的时候,启动一个客户 ...
- 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 ...
- sqlserver 缩小表空间
1. 保留需要的数据之新表中->TRUNCATE原表数据->还原之前保留的数据之原表中->压缩表空间 脚本类似如下 SELECT * INTO #keep FROM Original ...
- 管中窥豹——从OVS看SDN
网络虚拟化是当前云计算最重要的特点之一,打通租户网络之间互通以及访问控制策略,最重要的是满足租户之间的网络隔离,这才是云计算网络的特点.而SDN的产生则是在网络虚拟化中,将控制面和业务面分离,控制面只 ...
- 关于AVALON总线动态地址对齐
在NIOS的使用中,我们往往要用到自定义外设,然后通过AVALON交换架构和NIOSII进行通信. AVALON总线,其实是一种交换架构的协议,在自定义外设挂在AVALON总线上时,一定要注意地址对齐 ...
- Python实战之网络编程socket学习笔记及简单练习
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET IPv4(默认) socket.AF_IN ...