责任链模式
来源:互联网 发布:阿拉比卡咖啡豆 知乎 编辑:程序博客网 时间: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
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- c++ 责任链模式
- java责任链模式
- 责任链模式
- 10个HTML5美化版复选框和单选框
- Spring.Net 泛型对象注入
- Zend Framework1-Zend_Layout 配置选项
- 消息传递
- 用vector实现二维向量
- 责任链模式
- COM易犯的错误
- SDN 实践之floodlight控制器统计流量种类
- HNUST专题练习:二分法
- MFC 中 悬浮提示Tooltip 多行显示(可以超过80字符限制)
- Linux ubuntu 14.04 环境下Qt creator中添加OpenCv2.4.9
- 最权威的身份证号码的正则表达式
- AutoInc ID问题
- 两名技术人员,历经8小时Piranha Games成功集成Xsolla