职责链模式(C++实现)
来源:互联网 发布:剑三 捏脸数据 编辑:程序博客网 时间:2024/05/23 13:41
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandle对象负责处理它。职责链可以简化对象之间的互相连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。
#include <iostream>#include <string>using namespace std;class Request{private:string requestType;string requestContent;int number;public:void SetRequestType( string type ){requestType = type;}string GetRequestType(){return requestType;}void SetRequestContent( string content ){requestContent = content;}string GetRequestContent(){return requestContent;}void SetNumber( int number ){this->number = number;}int GetNumber(){return 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.GetRequestType() == "请假" && request.GetNumber() <= 2 ){cout<<name<<":"<<request.GetRequestContent()<<" 数量"<<request.GetNumber()<<" 被批准"<<endl;}else{if( superior != NULL )superior->RequestApplications( request );}}};class Majordomo : public Manager{public:Majordomo( string name ) : Manager(name){}void RequestApplications( Request& request ){if( request.GetRequestType() == "请假" && request.GetNumber() <= 5 ){cout<<name<<":"<<request.GetRequestContent()<<" 数量"<<request.GetNumber()<<" 被批准"<<endl;}else{if( superior != NULL ){superior->RequestApplications( request );}}}};class GeneralManager : public Manager{public:GeneralManager( string name ) : Manager( name ){}void RequestApplications( Request& request ){if( request.GetRequestType() == "请假"){cout<<name<<":"<<request.GetRequestContent()<<" 数量"<<request.GetNumber()<<" 被批准"<<endl;}else if( request.GetRequestType() == "加薪" && request.GetNumber() <= 500 ){cout<<name<<":"<<request.GetRequestContent()<<" 数量"<<request.GetNumber()<<" 被批准"<<endl;}else if( request.GetRequestType() == "加薪" && request.GetNumber() > 500 ){cout<<name<<":"<<request.GetRequestContent()<<" 数量"<<request.GetNumber()<<" 再说吧"<<endl;}}};int main(){CommonManager jinli("金利");Majordomo zongjian("宗剑");GeneralManager zhongjingli("钟精励");jinli.SetSuperior( &zongjian );zongjian.SetSuperior( &zhongjingli );Request request;request.SetRequestType("请假");request.SetRequestContent("小菜请假");request.SetNumber( 1 );jinli.RequestApplications( request );Request request2;request2.SetRequestType("请假");request2.SetRequestContent("小菜请假");request2.SetNumber( 4 );jinli.RequestApplications( request2 );Request request3;request3.SetRequestType("加薪");request3.SetRequestContent("小菜请求加薪");request3.SetNumber( 500 );jinli.RequestApplications( request3 );Request request4;request4.SetRequestType("加薪");request4.SetRequestContent("小菜请求加薪");request4.SetNumber( 1000 );jinli.RequestApplications( request4 );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)
- php全局变量$_SERVER解析
- ios--设计模式--简单工厂模式
- std::list
- SQLite--相关查询
- hust 1010 KMP算法求最小循环节
- 职责链模式(C++实现)
- Codeforces_394B_Very Beautiful Number(数论)
- Android Handler简记
- Swing 窗体关闭对话框提示
- 李东超韩顺平亲自披挂上阵广州传智PHP首期
- CocoaPods的安装和初级使用
- ios--设计模式--类关系
- Activity的 onSaveInstanceState() 和 onRestoreInstanceState()
- c++对象模型