责任链模式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 总结

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

设计模式--责任链模式C++实现的更多相关文章

  1. java 设计模式 -- 责任链模式

    设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...

  2. 浅谈Python设计模式 -- 责任链模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 之前在最开始就聊了Python设计模式有三种,其中关于创建型和结构型设计模式基本 ...

  3. 【设计模式】Java设计模式 - 责任链模式

    [设计模式]Java设计模式 - 责任链模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 责 ...

  4. 我的Java设计模式-责任链模式

    今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯 ...

  5. Java设计模式-责任链模式

    提出问题: 最初接触责任链模式就是在struts2中,在当时学的时候看了一眼,大概知道了原理,最近在复习,模拟struts2,说是模拟只是大体模拟了struts2的工作流程,很多东西都是写死的,只是为 ...

  6. Java与设计模式-责任链模式

    责任链模式属于行为型设计模式之中的一个,怎么理解责任链?责任链是能够理解成数个对象首尾连接而成,每个节点就是一个对象.每个对象相应不同的处理逻辑,直至有一个对象响应处理请求结束.这一种模式成为责任链模 ...

  7. php设计模式-责任链模式

    责任链模式更像是一种简化多种场景下调用处理的一种设计模式,特别适合if-else分支判断很多的场景.比如是根据不同会员等级给予不同的优惠力度. 它的定义:对象的调用是由下家的应用连接起来的处理链.一直 ...

  8. C#设计模式-责任链模式(Chain of Responsibility Pattern)

    引子 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现.现在以请假流程为例,一般公 ...

  9. php 23种设计模式 - 责任链模式

    责任链模式 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行 ...

  10. 23种设计模式--责任链模式-Chain of Responsibility Pattern

    一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...

随机推荐

  1. Java栈之顺序栈存储结构实现

    一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实 ...

  2. openURL的使用

    1)私有方法跳转 /** 私有方法,不建议使用 利用ASCII值进行拼装组合方法.这样可绕过审核. 上面是进入蓝牙界面的方法.也可以有其他的页面可以跳转.设置页面是@"@"Pref ...

  3. CSS实现文本超过指定长度显示省略号

    <style type="text/css"> li { width:200px;/*宽度,超过即会溢出*/ line-height:25px;/*设置行间距*/ te ...

  4. PKU 1226 Substrings(字符串匹配+暴搜KMP模板)

    原题大意:原题链接 给出n个字符串,找出一个最长的串s,使s或者s的反转字符串(只要其中一个符合就行)同时满足是这n个串的子串. 对于样例,第一组ABCD   BCDFF  BRCD最长的串就是CD; ...

  5. Lua 可控下标数组遍历

    , , , , , , , , , , , } , , } local j = 1 while i <= #aaa do if bbb[j] == aaa[i] then -- 如果 b下标元素 ...

  6. Activiti工作流引擎数据库表结构

    Activiti工作流引擎数据库表结构 一.数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. ACT_RE_ ...

  7. 手动加载B120i/B320i阵列卡驱动安装RHEL7.0

    实验设备: Micro server Gen8(B120i) DL360e Gen8(B320i) 目录 一.前期准备... 1 二.加载阵列卡驱动... 11 三.手动分区... 21 四.安装设置 ...

  8. 同一个tomcat启动多个实例

    一般在使用Tomcat时,服务器会从conf及webapps目录中读取配置文件,并将文件写入logs.temp和work目录,当然一些jar文件和class文件需要从服务器的公共目录树中予以加载.因此 ...

  9. 20145313张雪纯 《Java程序设计》第9周学习总结

    20145313张雪纯 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接 ...

  10. 20145314郑凯杰 《Java程序设计》实验五 实验报告

    20145314郑凯杰 <Java程序设计>实验五 实验报告 实验搭档王亦徐:http://www.cnblogs.com/1152wyx/p/5471524.html 实验要求 完成实验 ...