职责链模式

来源:互联网 发布:薛家 知乎 编辑:程序博客网 时间:2024/05/01 18:53
#include <iostream>#include <string>using namespace std;class Handler{public:Handler() {}Handler(const string& strName) : m_strName(strName) {}void setHandler(Handler* pobjHandler){m_pobjHandler = pobjHandler;}virtual void request(const int& request) = 0;protected:Handler* m_pobjHandler;string m_strName;};class ConcreteHandlerOne : public Handler{public:ConcreteHandlerOne() {}ConcreteHandlerOne(const string& strName) : Handler(strName) {}virtual void request(const int& request) override{if (request < 100){cout << m_strName << " handle request less than 100" << endl;}else{m_pobjHandler->request(request);}}};class ConcreteHandlerTwo : public Handler{public:ConcreteHandlerTwo() {}ConcreteHandlerTwo(const string& strName) : Handler(strName) {}virtual void request(const int& request) override{cout << m_strName << " handle request more than 100" << endl;}};int main(){Handler* pobjHandlerOne = new ConcreteHandlerOne("行");Handler* pobjHandlerTwo = new ConcreteHandlerTwo("彳亍");pobjHandlerOne->setHandler(pobjHandlerTwo);pobjHandlerOne->request(200);return 0;}
总结:有点类似于链表,只要设置好后继,会把请求找到一个合适的处理。脑洞开一下,可以照着链表找前驱,职责链也可以做到。
0 0
原创粉丝点击