职责链模式(C++实现)

来源:互联网 发布:ds18b20数据手册pdf 编辑:程序博客网 时间:2024/06/07 19:29

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

这里写图片描述

#include<iostream>#include<string> using namespace std;//职责链模式//请求类class Request{public:    Request(string requesttype, string  requestcontent, int     number)         :requestType(requesttype), requestContent(requestcontent), Number(number)    {        ;    }    string  requestType;    string  requestContent;    int     Number;};//管理类的抽象接口class  Manage{   protected:      string name;      Manage * superior;  //上级   public:       Manage(string name){           this->name = name;           superior = 0;       }       void SetSuperior(Manage * superior){           this->superior = superior;       }       virtual void  RequestApplications(Request request)=0;};//经理class  CommonManager :public Manage{public:      CommonManager(string name):Manage(name){    }    void  RequestApplications(Request request){        if (request.requestType == "请假"&& request.Number <= 2)        {            cout << this->name <<":"<< request.requestContent << "数量" << request.Number<<"被批准"<<endl;        }        else        {            if ( superior!=0 ){                superior->RequestApplications(request);            }        }    }};//总监class  Majordomo :public Manage{public:    Majordomo(string name) :Manage(name){    }    void  RequestApplications(Request request){        if (request.requestType == "请假"&& request.Number <= 5)        {            cout << this->name << ":" << request.requestContent << "数量" << request.Number << "被批准" << endl;        }        else        {            if (superior != 0){                superior->RequestApplications(request);            }        }    }};//总经理class  GeneralManager :public Manage{public:    GeneralManager(string name) :Manage(name){    }    void  RequestApplications(Request request){        if (request.requestType == "请假")        {            cout << this->name << ":" << request.requestContent << "数量" << request.Number << "被批准" << endl;        }        else if (request.requestType == "加薪" && request.Number<=500)        {            cout << this->name << ":" << request.requestContent << "数量" << request.Number << "被批准" << endl;        }        else if (request.requestType == "加薪" && request.Number > 500){            cout << this->name << ":" << request.requestContent << "数量" << request.Number << "在说吧" << endl;        }    }};int main(){    CommonManager  jinli("经理");    Majordomo      zongjian("总监");    GeneralManager zongjinli("总经理");    jinli.SetSuperior( &zongjian );    zongjian.SetSuperior( &zongjinli );    Request request("请假","小菜请假",1);    jinli.RequestApplications(request);    request.requestType = "请假";    request.requestContent = "小菜请假";    request.Number = 5;    jinli.RequestApplications(request);    request.requestType = "加薪";    request.requestContent = "小菜请求加薪";    request.Number = 500;    jinli.RequestApplications(request);    request.requestType = "加薪";    request.requestContent = "小菜请求加薪";    request.Number = 600;    jinli.RequestApplications(request);    return 0;}
0 0
原创粉丝点击