责任链模式
来源:互联网 发布:数据分析 兼职 编辑:程序博客网 时间:2024/05/28 23:09
//责任链模式
#include <string.h>
class Request
{
private:
int day;
string reason;
public:
Request(int day, string reason)
{
this->day = day;
this->reason = reason;
}
int getday()
{
return day;
}
string getreason()
{
return reason;
}
}; //接下来看下请求相应者,他们有两个核心方法,一个是相应操作,一个是选择继任者。
class Boss
{
private:
string name;
protected:
Boss *successor;
public:
Boss(string name)
{
this->name = name;
}
virtual void SetBosssuccessor(Boss * successor)
{
this->successor=successor;
}
virtual bool PassRequest(Request request)=0;
};
class PM:public Boss
{
public:
PM(string name): Boss(name) {}
public:
bool PassRequest(Request request)
{
int day = request.getday();
// string reason = request.getreason();
if (day <= 0.5)
{
return true;
}
return successor->PassRequest(request);
}
};
class HR:public Boss
{
public:
HR(string name):Boss(name){ }
bool PassRequest(Request request)
{
int day = request.getday();
// string reason = request.getreason();
if (day > 0.5&&day<=2)
{
return true;
}
if(successor)
return successor->PassRequest(request);
return false;
}
};
class Manager :public Boss
{
public:
Manager(string name): Boss(name){ }
bool PassRequest(Request request)
{
int day = request.getday();
string reason = request.getreason();
if (!reason.compare("正当理由"))
{
return true;
}
return false;
}
};
//定义一个处理请求的接口,它可以维护一个后继者连接
typedef enum kind
{
HELP,
PRINT
}KIND;
class HelpHandler {
friend class Request;
public:
HelpHandler(){}
void SetSuccessor(HelpHandler *succ)
{
successor=succ;
}
virtual ~HelpHandler()
{
if(successor)
delete successor;
}
virtual void HandleHelp(Request *theRequest);
virtual void HandleRequest(Request *theRequest);
private:
HelpHandler * successor;
};
void HelpHandler::HandleHelp(Request *theRequest)//每个在链上的对象一致的处理请求和链上访问后继者的接口
{
if(successor){
successor->HandleHelp(theRequest);
}
}
void HelpHandler::HandlePrint(Request *theRequest)
{
if(successor){
successor->HandlePrint(theRequest);
}
}
void HelpHandler::HandleRequest(Request *theRequest)
{
switch(theRequest->GetKind())
{
case HELP:
HandleHelp((HandleHelp*)theRequest);
break;
case PRINT:
HandlePrint((HandlePrint *)theRequest);
break;
default:
break;
}
}
class Request{
public:
kind GetKind()
{
return k;
}
kind k;
Request(kind Kind):k(Kind){}
};
class HandleHelp: public Request {
HandleHelp(kind Kind):Request(Kind){}
};
class HandlePrint: public Request{
HandlePrint(kind Kind):Request(Kind){}
};
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- c++ 责任链模式
- java责任链模式
- 责任链模式
- Multitouch Part 1: Getting Started with Multitouch in Windows 7
- c++list 类
- 题目1018:统计同成绩学生人数
- 淘宝开源平台(taobao
- javaproject 用axis2发布
- 责任链模式
- 在邮件正文完美展示你的简历(一)
- git使用小结
- 工厂模式
- String的indexof()方法的实现
- TCP IP 学习笔记四:ARP 和RARP
- 从程序员到项目经理(17):你不是一个人在战斗
- C#中的MessageBox消息对话框
- 关于23种设计模式的有趣见解