职责链模式(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
- 职责链模式(C语言实现)
- 职责链模式(C++)
- 职责链模式实例(C#)
- 职责链模式(C++实现)
- 职责链模式(C++实现)
- 【C++】Chapter20:职责链模式
- Objective C--职责链模式
- Objective C 职责链模式
- C++实现职责链模式
- 职责链模式lua实现
- 职责链模式----C++实现
- C++实现职责链模式
- 职责链模式(java实现)
- 设计模式十六(职责链模式,python实现)
- 设计模式C++实现--职责链模式
- 职责链模式(Chain of Responsibility)的Java实现
- 职责链模式(二):职责链模式概述
- 职责链模式(ChainOfResponsibity)
- 天纵智能软件快速开发平台仪表盘类统计分析插件
- BZOJ1083 [SCOI2005]繁忙的都市
- php图片处理代码分享,包括缩放、剪裁、缩放、翻转、旋转、透明、锐化等
- mmc驱动中的mmc_host结构体中rescan_disable变量的作用及使用
- 创业公司快速搭建立体化监控之路
- 职责链模式(C++实现)
- 理解Base64编码
- Android 入门----APP是如何加载的
- 求有环单链表中的环长、环起点、链表长
- 生成二维码
- hibernate多表操作之一对多的双向关联
- DialogUtil
- uva 1600Patrol Robot
- 二进制十进制转换