


























职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

#include <string>
class Request
{
public:
Request(std::string type, std::string content, int count);
std::string Type();
std::string Content();
int Count();
private:
std::string m_Type;
std::string m_Content;
int m_Count;
};
#include "request.h"
Request::Request(std::string type, std::string content, int count)
:m_Type(type),m_Content(content),m_Count(count)
{
}
std::string Request::Type()
{
return m_Type;
}
std::string Request::Content()
{
return m_Content;
}
int Request::Count()
{
return m_Count;
}
#include "request.h"
class Manager
{
public:
Manager();
virtual ~Manager();
virtual void DoRequest(Request& request);
void SetLastLevel(Manager* manager);
protected:
Manager* m_Last;
};
#include "manager.h"
class Director : public Manager
{
public:
Director();
void DoRequest(Request& request) override;
};
#include "director.h"
#include <iostream>
Director::Director()
{
}
void Director::DoRequest(Request &request)
{
if(request.Type() == "请假" && request.Count() < 11)
{
std::cout << "总监批准请假" << std::endl;
}
else if(request.Type() == "加薪" && request.Count() < 1000)
{
std::cout << "总监批准加薪" << std::endl;
}
else
{
if(m_Last)
m_Last->DoRequest(request);
}
}
#include <iostream>
#include "managerp.h"
#include "director.h"
#include "generalmanagerp.h"
#include "request.h"
using namespace std;
int main()
{
GeneralManagerP* gmp = new GeneralManagerP();
Director* direcotr = new Director();
ManagerP* mp = new ManagerP();
direcotr->SetLastLevel(gmp);
mp->SetLastLevel(direcotr);
Request req1("请假", "小明要请假", 5);
mp->DoRequest(req1);
Request req2("请假", "小明要请假", 18);
mp->DoRequest(req2);
Request req3("加薪", "小红要请假", 500);
mp->DoRequest(req3);
Request req4("加薪", "小明要请假", 50000);
mp->DoRequest(req4);
return 0;
}
经理批准
总经理批准请假
总监批准加薪
模式的优点
模式的缺点
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。