美文网首页
c++责任链模式

c++责任链模式

作者: 一路向后 | 来源:发表于2021-02-25 22:57 被阅读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天假, 同意了!
    你请的假时间太长,不同意!
    

    相关文章

      网友评论

          本文标题:c++责任链模式

          本文链接:https://www.haomeiwen.com/subject/skspfltx.html