职责链模式(Chain of Responsibility)
flyfish
#include "stdafx.h"
#include <iostream>
#define SAFE_DELETE(p) if (p) { delete p; p = nullptr; }
class AuditingRequest
{
public:
AuditingRequest(int nMoney) : m_nMoney(nMoney) {}
int GetMoney() { return m_nMoney; }
private:
int m_nMoney;
};
class Employee
{
public:
//处理接口
virtual bool HandleRequest(AuditingRequest *pRequest) = 0;
};
class Manager1 : public Employee
{
public:
Manager1(Employee *handler) : m_pHandler(handler) {}
bool HandleRequest(AuditingRequest *pRequest)
{
if (pRequest->GetMoney() <= 1000)
{
std::cout << "Manager1 Yes." << std::endl;
return true;
}
std::cout << "Too much,Manager2 Handle." << std::endl;
return m_pHandler->HandleRequest(pRequest);
}
private:
Employee *m_pHandler;
};
class Manager2 : public Employee
{
public:
Manager2(Employee *handler) : m_pHandler(handler) {}
bool HandleRequest(AuditingRequest *pRequest)
{
int nMoney = pRequest->GetMoney();
if (nMoney<=2000 && nMoney>1000)
{
std::cout << "Manager2 Yes." << std::endl;
return true;
}
std::cout << "Too much,Manager3 Handle." << std::endl;
return m_pHandler->HandleRequest(pRequest);
}
private:
Employee *m_pHandler;
};
class Manager3 : public Employee
{
public:
Manager3(){}
bool HandleRequest(AuditingRequest *pRequest)
{
int nMoney = pRequest->GetMoney();
if (nMoney <= 3000 && nMoney>2000)
{
std::cout << "Manager3 Yes." << std::endl;
return true;
}
else
{
std::cout << "Manager3 No." << std::endl;
return false;
}
}
private:
Employee *m_pHandler;
};
int main()
{
Employee *pM3 = new Manager3();
Employee *pM2 = new Manager2(pM3);
Employee *pM1 = new Manager1(pM2);
AuditingRequest *pAuditingRequest = new AuditingRequest(2500);
pM1->HandleRequest(pAuditingRequest);
SAFE_DELETE(pM3);
SAFE_DELETE(pM2);
SAFE_DELETE(pM1);
SAFE_DELETE(pAuditingRequest);
system("pause");
return 0;
}
//输出
//Too much, Manager2 Handle.
//Too much, Manager3 Handle.
//Manager3 Yes.