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;
    }
  • 相关阅读:
    SOAP webserivce 和 RESTful webservice 对比及区别(转载)
    JavaWeb工程中web.xml基本配置(转载学习)
    iframe 自适应
    SQL分组求每组最大值问题的解决方法收集 (转载)
    关于试用jquery的jsonp实现ajax跨域请求数据的问题
    解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
    Hadoop编译源码(面试重点)
    Hadoop学习(二)自己编译Hadoop安装包
    代理模式实现方式及优缺点对比
    zookeeper
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782907.html
Copyright © 2011-2022 走看看