责任链模式将处理请求的对象连接成一条链,请求沿链逐级传递,直到某个对象处理该请求为止。
示例代码
#include "PublicHeaders.h"
#pragma once
class Request
{
public:
virtual int GetType()
{
return this->_type;
}
Request(int t)
{
this->_type = t;
}
private:
int _type;
};
class Handler
{
public:
virtual void HandleRequest(Request*request) = 0;
void setSuccessor(Handler *s)
{
this->successor = s;
}
protected:
Handler *successor = nullptr;
};
class HandlerA :public Handler
{
public:
virtual void HandleRequest(Request*request)override
{
if (request->GetType() == 0)
{
cout << "do request success in " << __FUNCTION__ << endl;
return;
}
if (successor)
{
successor->HandleRequest(request);
}
}
};
class HandlerB :public Handler
{
public:
public:
virtual void HandleRequest(Request*request)override
{
if (request->GetType() == 1)
{
cout << "do request success in " << __FUNCTION__ << endl;
return;
}
if (successor)
{
successor->HandleRequest(request);
}
}
};
void testChain()
{
Handler *ha = new HandlerA;
Handler*hb = new HandlerB;
ha->setSuccessor(hb);
Request *re = new Request(0);
ha->HandleRequest(re);
}