脚本宝典收集整理的这篇文章主要介绍了职责链模式,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
使多个对象都有机会处理请求,从而避免请求的发送和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理为止。
enum ReqestTyPE{
HANDLE1,
HANDLE2,
HANDLE3
};
class Reqest
{
public:
Reqest(const std::string& desc,ReqestType request_type):
desc_(desc),
request_type_(request_type)
{
}
ReqestType getReqestType() const
{
return request_type_;
}
const std::string& getDesc() const
{
return desc_;
}
PRivate:
std::string desc_;
ReqestType request_type_;
}
class ChainHandler
{
public:
ChainHandler():
next_chain_hander_(nullptr)
{
}
void setNextChain(ChainHandler* next_chain_hander)
{
next_chain_hander_=next_chain_hander
}
void handle(const Reqest& reqest)
{
if(canHandleRequest(reqest))
processRequest(reqest)
else
sendReqestToNextHandler(reqest)
}
protected:
virtual bool canHandleRequest(const Reqest& reqest) = 0;
virtual void processRequest(const Reqest& reqest) = 0;
private:
void sendReqestToNextHandler(const Reqest& reqest)
{
if(next_chain_hander_)
next_chain_hander->handle(reqest);
}
ChainHandler* next_chain_hander_;
};
class Handler1 : public ChainHandler
{
virtual bool canHandleRequest(const Reqest& reqest) override
{
return reqest.getReqestType()==ReqestType::HANDLE1;
}
virtual void processRequest(const Reqest& reqest) override
{
std::cout<<"Handler1:"<<reqest.getDesc()<<std::endl;
}
}
class Handler2 : public ChainHandler
{
virtual bool canHandleRequest(const Reqest& reqest) override
{
return reqest.getReqestType()==ReqestType::HANDLE2;
}
virtual void processRequest(const Reqest& reqest) override
{
std::cout<<"Handler2:"<<reqest.getDesc()<<std::endl;
}
}
class Handler3 : public ChainHandler
{
virtual bool canHandleRequest(const Reqest& reqest) override
{
return reqest.getReqestType()==ReqestType::HANDLE3;
}
virtual void processRequest(const Reqest& reqest) override
{
std::cout<<"Handler3:"<<reqest.getDesc()<<std::endl;
}
}
int main()
{
Handler1 h1;
Handler2 h2;
Handler3 h3;
h1.setNextChain(&h2);
h2.setNextChain(&h3);
Reqest reqest("task",ReqestType::HANDLE3);
h1.handle(reqest);
return 0;
}
以上是脚本宝典为你收集整理的职责链模式全部内容,希望文章能够帮你解决职责链模式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。