《大话设计模式》读书笔记之C++实现--chapter24命令模式
2017-10-17 16:05
393 查看
#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; }
相关文章推荐
- 《大话设计模式》读书笔记之C++实现--chapter6装饰模式
- 《大话设计模式》读书笔记之C++实现--chapter8工厂方法模式
- 《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式
- 《大话设计模式》读书笔记之C++实现--chapter27解释器模式
- 《大话设计模式》读书笔记(C++代码实现) 第二章:策略模式
- 《大话设计模式》读书笔记之C++实现--chapter15抽象工厂模式
- 《大话设计模式》读书笔记(C++代码实现) 第七章:代理模式
- 《大话设计模式》读书笔记之C++实现--chapter22桥接模式
- 《大话设计模式》读书笔记(C++代码实现) 第一章:简单工厂模式
- 《大话设计模式》读书笔记之C++实现--chapter7代理模式
- 《大话设计模式》读书笔记之C++实现--chapter2策略模式(商场收费系统)
- 《大话设计模式》读书笔记(C++代码实现) 第二章:策略模式
- 《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式
- 《大话设计模式》读书笔记(C++代码实现) 第一章:简单工厂模式
- 《大话设计模式》读书笔记(C++代码实现) 第七章:代理模式
- 《大话设计模式》读书笔记之C++实现--chapter23命令模式
- 《大话设计模式》读书笔记之C++实现--chapter1运算工厂类(简单计算器)
- 大话设计模式--模板方法模式 TemplateMethod -- C++ 实现
- 《大话设计模式》- 策略模式 - C++实现
- 大话设计模式C++实现-第21章-单例模式