c++责任链模式
2021-02-25 本文已影响0人
一路向后
1.责任链模式简介
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
2.源码实现
#include <iostream>
#include <string>
using namespace std;
//抽象处理者
class Handler
{
public:
Handler() { m_pNextHandler = NULL; }
virtual ~Handler(){};
//设置下一个处理者
void SetNextHandler(Handler *successor) { m_pNextHandler = successor; }
//处理请求
virtual void HandleRequest(int days) = 0;
protected:
Handler *m_pNextHandler;
};
//具体处理者, 主管
class Director : public Handler
{
public:
virtual void HandleRequest(int days)
{
if(days <= 1)
{
cout << "我是主管, 有权批准一天假, 同意了!" << endl;
}
else
{
m_pNextHandler->HandleRequest(days);
}
}
};
//具体处理者,经理
class Manager : public Handler
{
public:
virtual void HandleRequest(int days)
{
if(days <= 3)
{
cout << "我是经理, 有权批准三天假, 同意了!" << endl;
}
else
{
m_pNextHandler->HandleRequest(days);
}
}
};
//具体处理者,老板
class Boss : public Handler
{
public:
virtual void HandleRequest(int days)
{
if(days <= 7)
{
cout << "我是老板, 最多让你请7天假, 同意了!" << endl;
}
else
{
cout << "你请的假时间太长,不同意!" << endl;
}
}
};
int main(int argc, char **argv)
{
Handler *director = new Director;
Handler *manager = new Manager;
Handler *boss = new Boss;
director->SetNextHandler(manager);
manager->SetNextHandler(boss);
director->HandleRequest(1);
director->HandleRequest(2);
director->HandleRequest(5);
director->HandleRequest(8);
delete boss;
delete manager;
delete director;
return 0;
}
3.编译源码
$ g++ -o example example.cpp
4.运行及其结果
$ ./example
我是主管, 有权批准一天假, 同意了!
我是经理, 有权批准三天假, 同意了!
我是老板, 最多让你请7天假, 同意了!
你请的假时间太长,不同意!