责任链模式

来源:互联网 发布:阿拉比卡咖啡豆 知乎 编辑:程序博客网 时间:2024/06/04 19:57
#include<iostream>#include <string>using namespace std;class Request{public:    string requestType;    string requestContent;    int number;};class Manager{protected:    string name;    Manager *superior;public:    Manager(string name)    {        this->name=name;    }    void setSuperior(Manager *superior)    {        this->superior=superior;    }    virtual void requestApplications(Request *request)=0;};class CommonManager:public Manager{public:    CommonManager(string name):Manager(name)    {}    void requestApplications(Request *request)    {        if(request->requestType=="请假" && request->number<=2)        {            cout<<name<<" "<<request->requestContent<<" 数量: "<<request->number<<"被批准"<<endl;        }        else         {            if(superior!=NULL)            {                superior->requestApplications(request);            }        }    }};class Majordomo:public Manager{public:    Majordomo(string name):Manager(name)    {}    void requestApplications(Request *request)    {        if(request->requestType=="请假" && request->number<=5)        {            cout<<name<<" "<<request->requestContent<<" 数量: "<<request->number<<"被批准"<<endl;        }        else         {            if(superior!=NULL)            {                superior->requestApplications(request);            }        }    }};class GeneralManager:public Manager{public:    GeneralManager(string name):Manager(name)    {}    void requestApplications(Request *request)    {        if(request->requestType=="请假")        {            cout<<name<<" "<<request->requestContent<<" 数量: "<<request->number<<"被批准"<<endl;        }    }};int main(){    CommonManager *jinli=new CommonManager("经理");     Majordomo *zongjian=new Majordomo("总监");    GeneralManager *zhongjingli=new GeneralManager("总经理");    jinli->setSuperior(zongjian);    zongjian->setSuperior(zhongjingli);    Request *request=new Request();    request->requestType="请假";    request->requestContent="李俊宏请假";    request->number=1;    jinli->requestApplications(request);    request->requestType="请假";    request->requestContent="李俊宏请假";    request->number=4;    jinli->requestApplications(request);    request->requestType="请假";    request->requestContent="李俊宏请假";    request->number=10;    jinli->requestApplications(request);    return 0;}

GOOD:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的
耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理为止。

0 0
原创粉丝点击