• 行为型模型 责任链模式


    行为型模型 责任链模式

    Handler
            处理类的抽象父类。
    concreteHandler
            具体的处理类。

    责任链优缺点
    优点:
            1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。
            2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。
            3。类与类之间可以以松耦合的形式加以组织。
    缺点:
            因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。

    适用于:
            链条式处理事情。工作流程化、消息处理流程化、事物流程化;

    /**
     * 行为型模型 责任链模式
     * Command模式也叫命令模式 ,是行为设计模式的一种。
     * Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,
     * 该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。
     *
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    #include <list>
    
    class CarHandle
    {
    public:
        CarHandle * setNextHandle(CarHandle * carhandle)
        {
            this->carhandle = carhandle;
            return this->carhandle;
        }
        virtual void HandleCar() = 0;
        virtual ~CarHandle() {}
    protected:
        // 注意: 此变量为保护属性
        CarHandle * carhandle;
    };
    
    class CarHandleHead: public CarHandle
    {
    public:
        virtual void HandleCar() override
        {
            std::cout << "处理车头" << std::endl;
            if (this->carhandle != nullptr)
            {
                this->carhandle->HandleCar();
            }
        }
    };
    
    class CarHandleBody: public CarHandle
    {
    public:
        virtual void HandleCar() override
        {
            std::cout << "处理车身" << std::endl;
            if (this->carhandle != nullptr)
            {
                this->carhandle->HandleCar();
            }
        }
    };
    
    class CarHandleTail: public CarHandle
    {
    public:
        virtual void HandleCar() override
        {
            std::cout << "处理车尾" << std::endl;
            if (this->carhandle != nullptr)
            {
                this->carhandle->HandleCar();
            }
        }
    };
    
    
    void mytest()
    {
        CarHandleHead * head = new CarHandleHead();
        CarHandleBody * body = new CarHandleBody();
        CarHandleTail * tail = new CarHandleTail();
    
        head->setNextHandle(body);
        body->setNextHandle(tail);
        tail->setNextHandle(nullptr);
    
        head->HandleCar();
        delete head;
        head = nullptr;
        delete body;
        body = nullptr;
        delete tail;
        tail = nullptr;
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    Pythonbreak
    Python水仙花数
    Pythoncontinue
    Python二重循环中的break与continue
    Python列表元素的添加操作
    OpenAPI中规范的数据类型
    NSSM创建服务
    事件模式为什么要求sender的参数时Object类型
    Jenkins踩坑
    C# InfluxDB批量插入
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782907.html
Copyright © 2020-2023  润新知