using std::deque;
using std::string;
using std::cout;
using std::list;
//责任链模式
//作者参考古代的女子三从四德原则,来举例
//分析第一个示例,女子的行为要请示,且是链状的流程,<pre name="code" class="cpp">//依次<span style="font-family: Arial, Helvetica, sans-serif;">请示父亲、请示丈夫、请示儿子请示或者continue(for语句的continue)</span>
//抽象基类class IWomen{public: virtual int GetType(){ return 0;} string GetRequest() { return "";}};class Handler {public: static int FATHER_LEVEL_REQUSET; static int HUSBAND_LEVEL_REQUSET; static int SON_LEVEL_REQUEST; private: int m_nlevel; Handler* m_pNextHandler; public: Handler(int level) { m_nlevel = level; } void HandleMessage(IWomen* pWomen) { if (pWomen->GetType() == m_nlevel) { Response(pWomen);//如果当前请求的级别对应就应答,不对应旧转下一个 } else { if (m_pNextHandler != NULL) { m_pNextHandler->HandleMessage(pWomen); } else cout<< "have no next"; } } void SetNext(Handler* p_handler) { m_pNextHandler = p_handler; }protected: virtual void Response(IWomen* pWomen) {}};int Handler::FATHER_LEVEL_REQUSET = 1;int Handler::HUSBAND_LEVEL_REQUSET = 2;int Handler::SON_LEVEL_REQUEST = 3;//实体类class Father : public Handler {public: Father(): Handler(FATHER_LEVEL_REQUSET){} virtual void Response(IWomen* pWomen) { cout << "request to father"; cout << pWomen->GetRequest();//可以根据情况重写请求 }};class Husband : public Handler {public: Husband(): Handler(HUSBAND_LEVEL_REQUSET){} virtual void Response(IWomen* pWomen) { cout << "request to husband"; cout << pWomen->GetRequest(); }};class Son : public Handler {public: Son(): Handler(SON_LEVEL_REQUEST) {} virtual void Response(IWomen* pWomen) { cout << "request to son"; cout << pWomen->GetRequest(); }};class Women : public IWomen { /* *1--未出嫁;只能请示父亲 *2--出嫁,只能请示丈夫 *3--夫死,只能请示儿子 */private: int m_ntype; string m_strRequest;public: Women(int ntype, string request) { m_ntype = ntype; switch (ntype) { case 1: {m_strRequest.append("danger request"); m_strRequest.append(request);} break; case 2: {m_strRequest.append("wife request"); m_strRequest.append(request);} break; case 3: {m_strRequest.append("muther request"); m_strRequest.append(request);} break; default: break; } } int GetType() { return m_ntype; } string GetRequest() { return m_strRequest; }};class Client {public: static void main() { IWomen* pwomen = new Women(2, "go to shopping"); Handler* father = new Father; Handler* son = new Son; Handler* husband = new Husband; father->SetNext(husband); husband->SetNext(son); father->HandleMessage(pwomen); }};//这个模式核心便是链,链上的阶级式处理者。//先抽象处理者,三个基本函数:请求处理的方法(当然要先判断级别)、链的排列方法(下一个处理者)、请求者必须实现的两个方法\//自己能处理的级别和不同级别的任务。//然后就是具体处理者,和实现请求者等了(按作者的习惯,一定要先虚化基类)。//场景类就基本是设置排序对象,进行调用了。int main(int argc, const char * argv[]){ // insert code here... Client::main(); std::cout << "Hello, World!\n"; return 0;}
设计模式观后(c++还原之十三 责任链模式)
最新推荐文章于 2024-07-07 23:15:22 发布