[设计模式]<6>. C++与职责链模式(chain of rsponsibility pattern)

默默地EEer,原文地址:

http://www.cnblogs.com/hebaichuanyeah/p/5625233.html

 

职责链模式指使多个对象多有机会处理请求,避免请求发送者和接受者的耦合关系。

将这些接受处理的对象连成一条链,并沿着该链处理请求。

 

一个传说中的应用情景:

假如去政府部门办事,遇到了打字员小丽,在打LOL的小张以及主任老李,互相踢皮球推脱。

#include <iostream>
using namespace std;

class Handler
{
protected:
    string name;
    Handler * successor;
public:

    Handler(){}
    virtual ~Handler(){}
    void setSuccessor(Handler * successor)
    {
        this->successor = successor;
    }
    string getName()
    {
        return name;
    }
    virtual void HandleRequest(string str)
    {

    }
};
//传说中的政府部分踢球皮球人员
class FootballPlayer : public Handler
{
public:
    FootballPlayer(string name)
    {
        this->name = name;
    }
    virtual void HandleRequest(string str)
    {
        if(name == str)
        {
            cout<<this->name<<": 办理事务.."<<endl;
        }
        else if(successor != NULL)
        {
            cout<<this->name<<":  这个不归我管,你去找"<<successor->getName()<<endl;
            successor->HandleRequest(str);
        }
        else
        {
            cout<<this->name<<":  这个办不了啦"<<endl;
        }
    }
};

main()
{
    Handler * xiaoli = new FootballPlayer("打字员小丽");
    Handler * xiaozhang = new FootballPlayer("在打lol的小张");
    Handler * laoli = new FootballPlayer("主任老李");
    //小丽把皮球踢给小张
    xiaoli->setSuccessor(xiaozhang);
    xiaozhang->setSuccessor(laoli);
    laoli->setSuccessor(NULL);

    xiaoli->HandleRequest("办个事");
}

 

posted @ 2016-06-28 22:30  默默地EEer  阅读(395)  评论(0编辑  收藏  举报