设计模式观后(c++还原之十三 责任链模式)

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;}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值