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天假, 同意了!
你请的假时间太长,不同意!
上一篇下一篇

猜你喜欢

热点阅读