三分钟掌握“职责链模式”——轻松搞定设计模式

职责链模式的官方定义:

职责链模式使得多个对象都有机会处理请求,从而降低了请求的发送者和接受者之间的耦合关系。这些对象被连成一条链,并沿着这条链传递发送者的请求,直到有一个对象能处理它为止。

职责链模式的类图:

1.职责链由若干个处理类拼接而成。每个处理类都有两个函数,setNext(Handler)用于设置当前处理类的下一跳地址,handle(request)用于处理请求。

若当前处理类的handle函数无法处理该请求,就将请求传给下一个处理类的handle函数处理。

2.这些处理类写完后交付给客户端。客户端需要创建所有处理类的对象,然后通过每个对象的setNext(Handler)函数设置每个对象的下一跳地址。然后执行某一个处理类对象的handler(request)函数,那么整条链就开始工作了;request会以此传递下去,直到某一个处理类能处理该请求为止。

职责链的好处:

(请求的处理类称为请求的接收者)

请求的发送者和接收者都不知道对方是谁,也就是接收者不知道发送者是谁,发送者不知道接收者是谁;而且链中的所有处理类都不知道链的结构。

职责链简化了对象的相互连接,每个对象仅仅需要维护一个下一跳地址,而不需要保存所有候选接收者的引用,这就大大降低了藕合度。

而且链的结构是由客户端定义的,客户端拿到的一个个处理类就像是一个个元器件,需要我们自己组装,因此这种方式很灵活,但也要避免一条请求走到链的末尾还是没有被处理的情况。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

《笨办法学Python》 第44课手记

《笨办法学Python》 第44课手记 这一节课评估自己的游戏代码,作者这节课的目的是希望你养成良好的写类和写函数的习惯,并且每段功能不同的代码之间要留有空行,...

17310
来自专栏haifeiWu与他朋友们的专栏

Python 数据处理

Numpy、Pandas是Python数据处理中经常用到的两个框架,都是采用C语言编写,所以运算速度快。Matplotlib是Python的的画图工具,可以把之...

682
来自专栏机器学习算法与Python学习

程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

1354
来自专栏开源优测

JMeter监听器10

前言 在jmeter中,通过监听器组件来提供查看、保存、和读取已保存的测试结果功能。 默认情况下,测试结果将被存储为xml格式的文件,文件的后缀: ".jtl"...

2864
来自专栏我杨某人的青春满是悔恨

Swift API 设计指南(上)

本文翻译自苹果官方文档:Swift API Design Guidelines,如有错漏,欢迎指出。

843
来自专栏数据结构与算法

P2885 [USACO07NOV]电话线Telephone Wire

题目描述 Farmer John's cows are getting restless about their poor telephone service;...

3109
来自专栏DannyHoo的专栏

iOS中解决后台返回的null导致的崩溃问题--NullSafe

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

863
来自专栏阿凯的Excel

文本数字拆分技巧

Excel处理人员呢,最喜欢的就是规范化的表,那什么样子的表是规范的呢?给大家个图片感受一下! ? 今天的要和大家分享的就是和规范化图表格格不入的,需要由不规...

2736
来自专栏听雨堂

字符串处理总结(旧)

在各类应用软件的开发中,字符串操作是最常见的操作之一。在各种不同的数据类型中,字符串类型是和现实世界关联最紧密的。对字符串的读入、比较、拼接、搜索、匹配、替换、...

1918
来自专栏CDA数据分析师

提问 | 1、SPSS的文字类型处理问题 2、如何剔除不满三年的样本?

来自经管之家 提问1: SPSS的文字类型处理问题,求大神教!! 在EXCEL中这样的数据类型转到SPSS怎么就成字符型再改为日期型还空白了呢? ? 解答: 这...

18510

扫码关注云+社区