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

    行为型模型 责任链模式

    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;
    }
  • 相关阅读:
    SSH深度历险(五) 深入浅出-----IOC AND AOP
    Hbuilder X下载及安装教程
    如何用Prometheus监控十万container的Kubernetes集群
    使用并部署Flutter Web的步骤实例
    回顾 Android 11 中的存储机制更新
    移动端UI一致性解决方案
    使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文
    Nginx PHP 报504 Gateway time-out错误的解决方法
    SPSS 24 安装详细教程及下载
    CoRL 2020奖项公布,斯坦福获最佳论文奖,华为等摘得最佳系统论文奖
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782907.html
Copyright © 2011-2022 走看看