加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

23种设计模式之责任链模式

发布时间:2020-12-13 20:56:56 所属栏目:百科 来源:网络整理
导读:责任链模式的定义 定义: 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系. 将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止 通俗的讲,就是将对请求的处理组成一条链,当请求来时,在链中依次传递,知道找到能够处

责任链模式的定义

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

通俗的讲,就是将对请求的处理组成一条链,当请求来时,在链中依次传递,知道找到能够处理此请求的对象

其通用类图如下:

23种设计模式之责任链模式

责任链模式的重点是 在"链"上,"链"由多个处理者 ConcreteHandler 组成的

Handler 抽象类代码如下:

23种设计模式之责任链模式

抽象的处理者实现三个职责:

  1. 定义一个请求的处理方法 handleMessage,唯一对外开放的方法
  2. 定义一个链的编排方法 setNext,设置下一个处理者
  3. 定义具体的处理者必须实现的两个方法,getHandlerLevel和echo

具体处理类实现抽象类的方法即可

其中涉及到的三个类:

  1. Level: 负责定义请求和处理级别
  2. Request: 负责封装请求
  3. Response: 负责封装链中返回的结果

场景类代码如下:

23种设计模式之责任链模式

在实际应用中,一般会有一个封装类对责任链进行封装,直接返回链中的第一个处理者,具体链的设置不需要高层模块关心,这样,更简化了高层模块的调用,减少模块间的耦合,提高系统的灵活性

责任链模式的应用

1.责任链模式的优点

责任链模式非常显著的优点就是将请求和处理分开.请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,两者解耦,提高系统的灵活性

2.责任链模式的缺点

  1. 性能问题,每个请求都是从链头遍历到链尾,特别在链比较长的时候,性能是一个非常 大的问题
  2. 调试不很方便,特别是链条比较长,环节比较多的时候,由于采用了类似递归的方式,调试的时候逻辑可能比较复杂

3.责任链模式的注意事项

链中节点数量需要控制,避免出现超长链的情况,一般的做法是在Handler中设置一个最大节点数量,在setNext方法中判断是否已经超出其阈值,超过则不允许该链建立,避免无意识的破坏系统性能


在上面的例子中,融合了模板方法模式,通过融合模板方法模式,各个实现类只要关注自己的业务逻辑就成了,至于什么事要自己处理,就让父类去决定好了,也就是说父类实现了请求传递的功能,子类实现请求的处理,符合单一职责原则,子类的实现非常简单,责任链的建立也非常灵活.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读