定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
UML图:
代码实现:
class IHandler
{
public:
IHandler() { m_pSuccessor = nullptr; }
virtual ~IHandler() {}
void SetSuccessor(IHandler *successor) { m_pSuccessor = successor; }
virtual void HandleRequest(int days) = 0;
protected:
IHandler *m_pSuccessor; // 后继者
};
// 经理
class Manager : public IHandler
{
public:
void HandleRequest(int days) override {
if (days <= 3) {
std::cout << days << std::endl;
} else {
m_pSuccessor->HandleRequest(days);
}
}
};
// 主管
class Director : public IHandler
{
public:
void HandleRequest(int days) override {
if (days <= 5) {
std::cout << days << std::endl;
} else {
m_pSuccessor->HandleRequest(days);
}
}
};
// 总裁
class CEO : public IHandler
{
public:
void HandleRequest(int days) override {
if (days <= 7) {
std::cout << days <std::endl;
}
}
};
int main()
{
IHandler *manager = new Manager();
IHandler *director = new Director();
IHandler *ceo = new CEO();
// 职责链:经理 -> 主管 -> 总裁
manager->SetSuccessor(director);
director->SetSuccessor(ceo);
manager->HandleRequest(1);
manager->HandleRequest(5);
manager->HandleRequest(10);
return 0;
}