zoukankan      html  css  js  c++  java
  • 设计模式--责任链模式C++实现

    责任链模式C++实现

    1定义

    使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象链成一条链,并沿着这条链传递该请求/命令,直到有对象处理它为止

    注:这里的请求、命令正是可以和命令模式进行结合的地方

    2类图

    class Handler

    {

    private:

      Handler* nextHandler;

    protected:

      Handler();

    pubic:

      virtual~Handler()=0;

      //每个处理者都必须对请求作出处理,如果是自己能处理的,自己处理,并且返回结果。否则,传递给下一个处理者

      Response handleMessage(Request *request)

      {

        Response *res = NULL;

        //如果请求级别和处理者级别相同/有能力处理,那么处理

        if(getHandlerLevel() == request.getRequestLevel())

        {

          res = echo(request);

        }

        else

        {

          if(nextHandler!= NULL)

          {

            res = nextHandler.handleMessage(request);

          }

          else

          {

            //没有适当的处理者,业务自行处理

          }

        }

      }

      void setNext(Handler hand)

      {

        nextHandler = hand;

      }

    protected:

      virtual Level getHandlerLevel()=0;

      //每个处理者都必须实现处理任务

      Response echo(Request res);

    };

    注:抽象处理者的三个职责:①定义请求处理方案,唯一对外开放;②定义一个链的编排方法setNext;③定义具体处理者的两个方法(权限获取和处理)

    class ConcreteHandler:public Handler

    {

    public:

      ConcreteHandler();

      ~ConcreteHandler();

    protected:

      Response echo()

      {

        //完成逻辑

        return NULL;

      }

      Level getHandlerLevel()

      {

        //设置自己的处理级别

        return;

      }

    };

    //等级设置。可以在内部详细处理优先级设置问题

    class Level{};

    //请求封装

    class Request

    {

    public:

      Level getRequestLevel()

      {

        return NULL;

      }

    };

    //处理者返回的数据

    class Response

    {};

    4提升性

    ①在实际中对于责任链的设置多半是固定的,所以可以将之封装从而实现客户端的最少知道(迪米特原则)

    ②在责任链中设置最大结点数

    5应用

    ①优点

    将请求和处理分开,达到解耦,迪米特。

    ②缺点

    链长度过长时就会有效率问题,其次是调试问题(这个问题也类似于递归)

    6 总结

    责任链可以作为一种补救措施.--中介者模式---模板方法模式

  • 相关阅读:
    【总结】编写自己的JDBC框架
    笔者带你剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)
    高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
    简单通用JDBC辅助类封装
    word2010中怎样快速修改同级标题格式
    怎么批量修改Word表格的宽度
    MS WORD 表格自动调整列宽,自动变漂亮,根据内容自动调整 .
    PowerDesiger 15逆向生成工程E-R图及导出word表格
    PowerDesigner-自定义生成WORD
    PowerDesigner如何自定义报表模板
  • 原文地址:https://www.cnblogs.com/lang5230/p/5328166.html
Copyright © 2011-2022 走看看