#include <iostream.h>
//职责链模式
class Request //发出的请求 依据其中的num来给各级管理自己判断是否有处理的职责
{
public:
int num;
public:
Request():num(0){}
virtual ~Request(){}
public:
void Set(int n)
{
num = n ;
}
};
class Manager //所有能对事物有权进行处理的抽象基类
{
protected:
Manager *manager; //上级聚合至下级内
public:
Manager(){}
virtual ~Manager(){}
public:
void SetManager(Manager *manager) //下级设置上级 当这级不能处理某个问题时 向上级提交
{
this->manager = manager;
}
virtual void ExeRequest(Request *request) = 0 ;
};
class Majordomo : public Manager //总监
{
public:
Majordomo(){}
virtual ~Majordomo(){}
public:
void ExeRequest(Request *request)
{
cout << "向总监请求加薪" << request->num <<endl;
if(request->num <= 1000)
cout << "总监批准加薪1000" << endl;
else
{
cout << "我不能决定须向上级请示" << endl;
this->manager->ExeRequest(request); //不能决策就交给上级决策 上级必须先存在
}
}
};
class CEO : public Manager
{
public:
CEO(){}
virtual ~CEO(){}
public:
void ExeRequest(Request *request)
{
if(request->num <= 1000)
cout << "CEO批准加薪1000" << endl;
else
cout << "CEO批准加薪" << request->num << endl;
}
};
void main()
{
Manager *ceo = new CEO();
Manager *majordomo = new Majordomo();
majordomo->SetManager(ceo);
Request *request = new Request();
request->Set(2000);
majordomo->ExeRequest(request);
}