(二十)职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
//请求
class Request
{
private:
int m_nNumber;
string name;
public:
Request(string str,int n):name(str),m_nNumber(n){}
int get()
{
return m_nNumber;
}
void set(int n)
{
m_nNumber=n;
}
string getname()
{
return name;
}
};
//管理者
class Manager
{
protected:
Manager* manager;
string name;
public:
Manager(string temp)
{
name = temp;
}
void SetSuccessor(Manager* temp)
{
manager = temp;
}
virtual void GetRequest(Request* request) = 0;
};
//经理
class CommonManager : public Manager
{
public:
CommonManager(string strTemp) : Manager(strTemp){}
virtual void GetRequest(Request* request)
{
if ( request->get()>=0 && request->get()<10 )
{
cout<<name<<"处理了"<<request->getname()<<"的"<<request->get()<<"个请求"<<endl;
}
else
{
manager->GetRequest(request);
}
}
};
//总监
class MajorDomo : public Manager
{
public:
MajorDomo(string name) : Manager(name){}
virtual void GetRequest(Request* request)
{
if(request->get()>=10)
{
cout<<name<<"处理了"<<request->getname()<<"的"<<request->get()<<"个请求"<<endl;
}
}
};
//客户端
int main()
{
Manager * common = new CommonManager("张经理");
Manager * major = new MajorDomo("李总监");
common->SetSuccessor(major);
Request* req = new Request("菜鸟",33);
common->GetRequest(req);
req->set(3);
common->GetRequest(req);
return 0;
}