zoukankan      html  css  js  c++  java
  • 责任链模式

    #include <iostream>
    
    using namespace std;
    
    class Handler
    {
    private:
        int mMsg;
        Handler *mNextHandler;
    public:
        Handler(int msg) :mMsg(msg), mNextHandler(NULL) {}
        ~Handler() {}
    public:
        virtual void handleMessage(int message) = 0;
    
        int getMessage()
        {
            return mMsg;
        }
    
        Handler *getNextHandler()
        {
            return mNextHandler;
        }
    
        void setNextHandler(Handler *handler)
        {
            mNextHandler = handler;
        }
    };
    
    class MouseHandler : public Handler
    {
    public:
        MouseHandler(int msg) :Handler(msg) {}
        ~MouseHandler() {}
    public:
        virtual void handleMessage(int message)
        {
            cout << "MouseHandler handled the message : " << message << endl;
        }
    };
    
    class CatHandler : public Handler
    {
    public:
        CatHandler(int msg) :Handler(msg) {}
        ~CatHandler() {}
    public:
        virtual void handleMessage(int message)
        {
            cout << "CatHandler handled the message : " << message << endl;
        }
    };
    
    class DogHandler : public Handler
    {
    public:
        DogHandler(int msg) :Handler(msg) {}
        ~DogHandler() {}
    public:
        virtual void handleMessage(int message)
        {
            cout << "DogHandler handled the message : " << message << endl;
        }
    };
    
    void looper(int message, Handler *handler)
    {
        Handler *temp = handler;
    
        while (true)
        {
            if (temp->getMessage() == message)
            {
                temp->handleMessage(message);
                break;
            }
            else if (temp->getMessage() == 0)
            {
                temp->handleMessage(message);
                break;
            }
            else
            {
                if (temp->getNextHandler() != NULL)
                {
                    temp = temp->getNextHandler();
                }
                else
                {
                    cout << "no handler!" << endl;
                    break;
                }
            }
        }
    }
    
    int main(int argc, char const *argv[])
    {
        Handler *mouseHandler = new MouseHandler(1);
        Handler *catHandler = new CatHandler(2);
        Handler *dogHandler = new DogHandler(0);
    
        mouseHandler->setNextHandler(catHandler);
        catHandler->setNextHandler(dogHandler);
    
        looper(2, mouseHandler);
        looper(-1, mouseHandler);
    
        delete dogHandler;
        dogHandler = NULL;
    
        delete catHandler;
        catHandler = NULL;
    
        delete mouseHandler;
        mouseHandler = NULL;
    
        return 0;
    }
  • 相关阅读:
    sublime text 4 vim 插件配置
    ssh-keygen 的使用
    distribution transaction solution
    bilibili 大数据 视频下载 you-get
    Deepin 20.2.1 安装 MS SQL 2019 容器版本
    【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
    【转】You Can Now Use OneDrive in Linux Natively Thanks to Insync
    dotnet 诊断工具安装命令
    Linux 使用 xrandr 设置屏幕分辨率
    【转】CentOS 7.9 2009 ISO 官方原版镜像下载
  • 原文地址:https://www.cnblogs.com/chen-cai/p/9773274.html
Copyright © 2011-2022 走看看