职责链模式(ChainOfResponsibity)
来源:互联网 发布:java高级程序员笔试题 编辑:程序博客网 时间:2024/06/06 10:54
1.目的
对于某个请求(Request),需要有多个对象(Manager)来依次处理,他们都有处理请求的接口,当一个对象处理不了的时候,需要自动的转给另外一个对象处理,这个时候就可以使用职责链模式
2.代码
ChainOfResponsibity.h
#ifndef CHAINOFRESPONSIBILITY_H_#define CHAINOFRESPONSIBILITY_H_#include <string>enum RequestType{LEAVE,RAISES};class Request{public:Request(RequestType, int, std::string);RequestType getType();int getNum();std::string getName();private:RequestType type;int num;std::string name;};class Manager{public:Manager();virtual ~Manager();void setSuperior(Manager&);void applyRequest(Request&);private:virtual bool handleRequest(Request&)=0;virtual std::string getTitle()=0;Manager* superior;};class CommonManager:public Manager{public:bool handleRequest(Request&);std::string getTitle();};class Director:public Manager{public:bool handleRequest(Request&);std::string getTitle();};class GeneralManager:public Manager{public:bool handleRequest(Request&);std::string getTitle();};#endif /* CHAINOFRESPONSIBILITY_H_ */
ChainOfResponsibity.cpp
#include "ChainOfResponsibility.h"#include <iostream>using namespace std;Request::Request(RequestType type, int num, string name):type(type), num(num), name(name){}RequestType Request::getType(){return type;}int Request::getNum(){return num;}string Request::getName(){return name;}Manager::Manager():superior(NULL){}Manager::~Manager(){}void Manager::setSuperior(Manager& superior){this->superior = &superior;}void Manager::applyRequest(Request& req){if(handleRequest(req)){cout<<getTitle()<<" : "<<req.getName()<<" Requests "<<req.getType()<<" "<<req.getNum()<<" approve!"<<endl;}else if(NULL != superior){superior->applyRequest(req);}else{cout<<getTitle()<<" : "<<req.getName()<<" Requests "<<req.getType()<<" "<<req.getNum()<<" not approve!"<<endl;}}bool CommonManager::handleRequest(Request& req){return (LEAVE == req.getType() && req.getNum() <= 2);}string CommonManager::getTitle(){return "CommonManager";}bool Director::handleRequest(Request& req){return (LEAVE == req.getType() && req.getNum() <= 5);}string Director::getTitle(){return "Director";}bool GeneralManager::handleRequest(Request& req){return (LEAVE == req.getType() || (RAISES == req.getType() && req.getNum() <= 500));}string GeneralManager::getTitle(){return "GeneralManager";}void chainofresponsibility(){Request q1(LEAVE, 2, "Tom");Request q2(LEAVE, 4, "Jim");Request q3(RAISES, 500, "Jerry");Request q4(RAISES, 800, "Jane");CommonManager cm;Director dr;GeneralManager gm;cm.setSuperior(dr);dr.setSuperior(gm);cm.applyRequest(q1);cm.applyRequest(q2);cm.applyRequest(q3);cm.applyRequest(q4);}
0 0
- 职责链模式(ChainOfResponsibity)
- 职责链模式(二):职责链模式概述
- 职责链模式(变种)
- 职责链模式(python)
- 职责链模式(23)
- 职责链模式(23)
- 职责链模式(23)
- 职责链模式(23)
- 职责链模式(C++)
- 职责链模式(四):纯与不纯的职责链模式,职责链模式总结
- 责任链模式(职责链模式)
- 设计模式(13)--职责链模式
- 职责链模式(Chain of Responsibility)
- 主题:请假 加薪(职责链模式)
- Chain of Responsibility(职责链模式)
- 职责链(Chain of Responsibility)模式
- 职责链模式(Chain Of Responsibility)
- 职责链模式(Chain of Responsibility)
- 这段Java代码有什么问题???
- mingw编译ffmpeg+x265过程记录
- 微新余微信号ivxinyu✅装逼必备!!心有余而肾不足,比逼格更高逼格的苹果发布
- vb源代码框中不能用滚轮的解决办法
- Android应用源码找美食看电影本地服务综合项目
- 职责链模式(ChainOfResponsibity)
- HDU 4998 Rotate 计算几何 2014 ACM/ICPC Asia Regional Anshan Online
- Linux下Tomcat的安装配置
- 数据库总结(4)-关系运算—验算、优化
- 内存管理之一:STL中的内存分配器
- C++中extern “C”含义深层探索
- linux下动态链接实现原理
- win7 下注册dll文件失败分析
- arm--ldm、stm指令解析