return true;
}
// The department manager is in?
bool IsIn()
{
return true;
}
private:
Manager *m_pHandler;
};
// Project supervisor
class PS : public Manager
{
public:
PS(Manager *handler) : m_pHandler(handler){}
bool HandleRequest(HolidayRequest *pRequest)
{
DM *pDM = dynamic_cast<DM *>(m_pHandler);
if (pDM != NULL)
{
if (pDM->IsIn())
{
return pDM->HandleRequest(pRequest);
}
}
cout<<"PS said:OK."<<endl;
return true;
}
private:
Manager *m_pHandler;
};
int main()
{
DM *pDM = new DM(NULL);
PS *pPS = new PS(pDM);
PM *pPM = new PM(pPS);
HolidayRequest *pHolidayRequest = new HolidayRequest(10);
pPM->HandleRequest(pHolidayRequest);
SAFE_DELETE(pHolidayRequest);
pHolidayRequest = new HolidayRequest(2);
pPM->HandleRequest(pHolidayRequest);
SAFE_DELETE(pDM);
SAFE_DELETE(pPS);
SAFE_DELETE(pPM);
SAFE_DELETE(pHolidayRequest);
}
优缺点
1.降低耦合度;职责链模式使得一个对象不用知道是哪一个对象处理它的请求。对象仅需要知道该请求会被正确的处理。接收者和发送者都没有对方的明确的信息,且链中的对象不需要知道链的结构;










