模式定义

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

类图

要点总结

  • Chain of Responsibility模式的应用场合在于“一个请求可能有多个接受者,但是最后真正的接受者只有一个”,这时候请求发送者与接受者的耦合有可能出现“变化脆弱”的症状,职责链的目的就是将二者解耦,从而更好地应对变化
  • 应用了Chain of Responsibility模式后,对象的职责分配将更具灵活性,我们可以在运行时动态添加、修改请求的处理职责
  • 如果请求传递到职责链的末尾任得不到处理,应该有一个合理的缺省机制,这也是每一个接受者对象的责任,而不是发出请求的对象的责任

Go语言代码实现

工程目录

responsibility_chain.go

package Responsibility_Chainimport "strconv"type Handler interface {Handler(handlerID int) string
}type handler struct {name stringnext HandlerhandlerID int
}func NewHandler(name string, next Handler, handlerID int) *handler{return &handler{name:      name,next:      next,handlerID: handlerID,}
}func (h *handler) Handler(handlerID int) string{if h.handlerID == handlerID{return h.name + " handled " + strconv.Itoa(handlerID)}return h.next.Handler(handlerID)
}

responsibility_chain_test.go

package Responsibility_Chainimport ("fmt""testing"
)func TestNewHandler(t *testing.T) {wang := NewHandler("laowang", nil, 1)zhang := NewHandler("lanzhang", wang, 2)r := wang.Handler(1)fmt.Println(r)r = zhang.Handler(2)fmt.Println(r)
}

设计模式--责任链(Responsibility_Chain)模式相关推荐

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

    Java设计模式-责任链模式,我想这是值得你了解一下下的啦. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持 ...

  2. 设计模式--责任链模式--Java实现

    设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...

  3. 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器

    理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...

  4. java责任链模式审批请假_Java设计模式-责任链模式

    Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...

  5. 设计模式-责任链(职责链)模式及责任链设计模式的应用

    1.什么是责任链设计模式 责任链设计模式主要构成有抽象处理者.具体处理者.客户类,在处理请求的时候,将请求通过客户类发送至处理链路上,这样所有处理对象都有机会处理请求,使发送者与接受者解耦 在责任链模 ...

  6. 设计模式—责任链模式

    原文作者:C语言中文网 原文地址:责任链模式(职责链模式)详解 目录 1.模式的定义与特点 2.模式的结构与实现 在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程 ...

  7. Java设计模式——责任链模式(职责链模式)详解

    模式的定义与特点 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链:当 ...

  8. 行为设计模式 - 责任链设计模式

    行为设计模式 - 责任链设计模式 责任链设计模式是行为设计模式之一. 目录[ 隐藏 ] 1责任链设计模式 1.1 JDK中的责任链模式示例 1.2责任链设计模式实例 1.3责任链设计模式 - 基类和接 ...

  9. php审批功能的实现代码,PHP实现基于状态的责任链审批模式详解

    本文实例讲述了PHP实现基于状态的责任链审批模式.分享给大家供大家参考,具体如下: 我们开发网站,除了前后,还有后台,除了内容管理,很多时候要涉及到『审批』. 比如:商务部要做个专题推广活动,活动中需 ...

最新文章

  1. 基于局部表面特征在杂乱场景中的三维物体识别
  2. openlayers 根据style设置显示级别并在字体加背景框
  3. 软件测试报告bug统计,软件测试中如何有效地写Bug报告
  4. Android之修改app名字客户需要升级需要注意的问题
  5. socekt编程-select
  6. ubuntu通过vmware与访问宿主的文件
  7. 永辉发布元宵数据:汤圆销售明显提升,多个民生产品增长超150%
  8. 轻量化网络:SqueezeNext
  9. 工作中如何设计秒杀场景
  10. arduino 实现时钟和计算器
  11. win10打开计算机黑屏怎么办,win10系统重启黑屏怎么办
  12. 计算机专业 论文检索,精选】计算机专业文献检索论文参考选题
  13. 插值法(最邻近,双线性,双三次),图像放缩 python实现
  14. 量子计算机解泊松方程,试求泊松方程的解.ppt
  15. Xshell重启服务器
  16. 外媒分析:为何说苹果一定没造车!
  17. 微信小程序播放m3u8视频总结
  18. ffmpeg 分离视频音频流 缺失sei信息
  19. 英特尔大师挑战赛燃爆斗鱼直播节,华硕ROG热血助阵
  20. Database-3:SQL语句之DQL

热门文章

  1. wordpress怎么打开php网站,wordpress怎么做网站
  2. php中new运算符的作用,C++_C++编程中new运算符的使用学习教程,new运算符用作从自由存储为 typ - phpStudy...
  3. 数据中心水环热泵余热回收系统分析与应用
  4. 大流行后的数据中心非接触式技术
  5. 弱电工程网络传输基础知识讲解
  6. 成功解决CondaError: Error reading file, file should be a text file containing packages conda create --he
  7. Py之terminaltables:terminaltables的简介、安装、使用方法之详细攻略
  8. 成功解决pandas\core\indexing.py:179: SettingWithCopyWarning: A value is trying to be set on a copy of a
  9. 成功解决absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'data_format'
  10. MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》