《大话设计模式》读书笔记之C++实现--chapter24命令模式
来源:互联网 发布:vs2017编程教程 编辑:程序博客网 时间:2024/05/16 07:26
#include <iostream>#include <QDebug>using namespace std;class ConcreteHandleSecond;class ConcreteHandleThird;//利用枚举类确定请求的等级enum Request{ Normal, Important, Urgent, UrgentAndImport};//接口类定义处理请求的子类设置继承者以及具体的请求处理方法class Handle{public: void SetSuccessor(Handle* successor) { m_successor = successor; } virtual void HandleRequest(Request type) = 0; virtual ~Handle(){} //为避免内存泄漏,将基类的虚构函数定义为虚析构函数protected: Handle* m_successor;};class ConcreteHandleFirst:public Handle{public: void HandleRequest(Request type) { if(Normal == type) cout << "ConcreteHandleFirst handle normal request" << endl; else if(m_successor != nullptr && m_successor != Handle::m_successor) m_successor->HandleRequest(type); else //如果继承者指针为空或者是基类的继承者指针,则无法处理请求 cout << "ConcreteHandleFirst no successor handle this request" << endl; }};class ConcreteHandleSecond:public Handle{public: void HandleRequest(Request type) { if(Important == type) cout << "ConcreteHandleSecond handle important request" << endl; else if(m_successor != nullptr && m_successor != Handle::m_successor) m_successor->HandleRequest(type); else cout << "ConcreteHandleSecond no successor handle this request" << endl; }};class ConcreteHandleThird:public Handle{public: void HandleRequest(Request type) { if(Urgent == type) cout << "ConcreteHandleThird handle urgent request" <<endl; else if(m_successor != nullptr && m_successor != Handle::m_successor) { qDebug() << m_successor; m_successor->HandleRequest(type); } else cout << "ConcreteHandleThird no successor handle this request" << endl; }};int main(int argc,char** argv){ Handle* handleFirst = new ConcreteHandleFirst(); Handle* handleSecond = new ConcreteHandleSecond(); Handle* handleThird = new ConcreteHandleThird(); handleFirst->SetSuccessor(handleSecond); handleSecond->SetSuccessor(handleThird); handleFirst->HandleRequest(Urgent); return 0;}
阅读全文
0 0
- 《大话设计模式》读书笔记之C++实现--chapter24命令模式
- 《大话设计模式》读书笔记之C++实现--chapter23命令模式
- 大话设计模式读书笔记之命令模式
- 【C++】Chapter24:访问者模式
- 《大话设计模式》读书笔记之C++实现--chapter7代理模式
- 大话设计模式读书笔记之策略模式
- 大话设计模式读书笔记之策略模式
- 大话设计模式读书笔记之原型模式
- 大话设计模式读书笔记之外观模式
- 大话设计模式读书笔记之观察者模式
- 大话设计模式读书笔记之状态模式
- 大话设计模式读书笔记之适配器模式
- 大话设计模式读书笔记之备忘录模式
- 大话设计模式读书笔记之组合模式
- 大话设计模式读书笔记之迭代器模式
- 大话设计模式读书笔记之访问者模式
- 《大话设计模式》java实现之命令模式
- 大话设计模式读书笔记之设计原则
- WorkerMan::Worker类解析(2)
- Java 8新特性
- Eclipse不能自动编译 java文件,不会生成CLASS
- AliOS Thing正式开源,走近阿里云的物联网技术
- 文件上传,带其他非文件参数,返回文件可以访问的本地地址
- 《大话设计模式》读书笔记之C++实现--chapter24命令模式
- myBAtis怎么获得ID自增长的值
- Android VTS test
- handlebars.js基础学习笔记
- 10 个实用技巧,让 Finder 带你飞
- 前端数据模拟神器mock.js
- 选太子
- java集合框架之ArrayList源码分析——如何扩展容量
- 欢迎使用CSDN-markdown编辑器