您的位置:首页 > 编程语言 > C语言/C++

《大话设计模式》读书笔记之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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  命令模式
相关文章推荐