职责链模式(Chain Of Responsibility Pattern)

职责链模式(Chain Of Responsibility Pattern):属于对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。


职责链模式UML图


职责链模式涉及的角色

抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
具体处理者(ConcreteHandler)角色:处理它所负责的请求,由于持有对下家的引用,所以可以访问它的后继者,如果可以处理该请求,就处理之,否则将该请求转发给它的后继者。


示例代码

抽象处理者 Handler

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.example.chainOfResponsebilityPattern;
* 职责链模式:抽象处理者
*
* 定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。
* 这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,
* 抽象方法handleRequest()规范了子类处理请求的操作。
*
* @author pengdh
* @date: 2017-08-12 14:05
*/
public abstract class {
protected Handler successor;
* 持有对下家的引用
*/
public void setSuccessor(Handler successor) {
this.successor = successor;
}
* 请求处理
*/
protected abstract void handlerRequest(int request);
}

具体处理者类 A ConcreteHandlerA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.chainOfResponsebilityPattern;
* 职责链模式:具体处理者类 A
*
* 处理它所负责的请求,由于持有对下家的引用,所以可以访问它的后继者,
* 如果可以处理该请求,就处理之,否则将该请求转发给它的后继者。
*
* @author pengdh
* @date: 2017-08-12 14:10
*/
public class ConcreteHandlerA extends {
protected void handlerRequest(int request) {
if (request >= 0 && request < 10) {
System.out.println("处理 0-10 请求" 大专栏  Java设计模式(二十一):职责链模式);
} else {
successor.handlerRequest(request); // 转移到后继者类处理
}
}
}

具体处理者类 B ConcreteHandlerB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.chainOfResponsebilityPattern;
* 职责链模式:具体处理者类 B
*
* 处理它所负责的请求,由于持有对下家的引用,所以可以访问它的后继者,
* 如果可以处理该请求,就处理之,否则将该请求转发给它的后继者。
*
* @author pengdh
* @date: 2017-08-12 14:17
*/
public class ConcreteHandlerB extends {
protected void handlerRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println("处理 10-20 的请求");
} else {
successor.handlerRequest(request); // 转移到后继者类处理
}
}
}

客户端测试类 ChainOfResponsibilityPatternTest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.chainOfResponsebilityPattern;
* 职责链模式:客户端测试类
*
* @author pengdh
* @date: 2017-08-12 14:21
*/
public class ChainOfResponsibilityPatternTest {
public static void main(String[] args) {
Handler h1 = new ConcreteHandlerA();
Handler h2 = new ConcreteHandlerB();
// 持有一个对后继者的引用
h1.setSuccessor(h2);
int[] arrays = {1, 15, 3, 11};
for (int request : arrays) {
h1.handlerRequest(request);
}
}
}

职责链模式的优点

客户端提交请求后,请求是沿着链传递直到有一个具体处理者对象处理它,这样做的好处是客户端可以不用管请求由哪个对象来处理。这使得接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构,结构是职责链可以简化对象的相互连接,它们只需保持一个对后继者的引用,而不需要保持它的所有候选接收者。从而大大降低了耦合度。但是也要注意的是职责链模式的具体处理是有末端的,也就是说会有请求得不到处理的情况,所以客户端在发送请求的时候需要注意是否有对应的具体处理者不能处理的情况。


参考文献

Java设计模式(二十一):职责链模式的更多相关文章

  1. Java设计模式之《职责链模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6530089.html 职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形 ...

  2. C#设计模式之二十一职责链模式(Chain of Responsibility Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中 ...

  3. java设计模式-----18、职责链模式

    概念: Chain of Responsibility(CoR)模式也叫职责链模式.责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的 ...

  4. JAVA设计模式之【职责链模式】

    职责链模式 专门处理请求链式传递的模式 角色 Handler抽象处理者 ConcreteHandler具体处理者 在职责链模式中,很多对象由每一个对象对其下家的引用而连接成一条链,请求在这条链上传递, ...

  5. C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例子吧,理解起来可能更 ...

  6. 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击

  7. Java设计模式学习记录-责任链模式

    前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...

  8. 大话设计模式Python实现-职责链模式

    职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...

  9. Java设计模式十九——责任链模式

    责任链模式 老李的苦恼 每个人在出生的时候,都早已在暗中被标好了三六九等. 老李是一名建筑工地的木匠,和大多数生活在社会最底层的农民工一样,一辈子老实本分,胆小怕事.在他们的心中,谁当老爷都没有区别, ...

  10. C#设计模式系列:职责链模式(Chain of Responsibility)

    1.职责链模式简介 1.1>.定义 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对 ...

随机推荐

  1. 设置Schema-Registry的配置,以支持Schema变化

    设置Schema-Registry的配置,以支持Schema变化 https://blog.csdn.net/lzufeng/article/details/81566766 curl -X PUT ...

  2. Keywords|Result|Final check

    科研论文写作 风格最好是excited,不要过于谦虚. Reference不要过多引用自己的paper,可以多引用本刊物的paper. Acknowledgement:感谢帮助input的人员,可以n ...

  3. Haploid inheritance|Hardy-Weinberg proportions|

    I.2 Haploid inheritance 单倍体也有短暂的二倍体时期: Meiosis:减数分裂 依据图示信息,同时基因型A的频率是p,基因型a的频率是(1-p): 建立Hardy-Weinbe ...

  4. XEN 3166

    XEN 3166 这题原题是spj,校oj上只用判断yes no,不过也差不多 题意分析之后就是求两个东西: 字典序最小的长度为m的子序列 同时这个字典序严格大于某个字符串 用序列自动机 先尽量相同, ...

  5. s01字符串---蓝桥杯

    问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定 0~ ...

  6. 吴裕雄--天生自然 JAVA开发学习:多线程编程

    class RunnableDemo implements Runnable { private Thread t; private String threadName; RunnableDemo( ...

  7. PhpMyadmin各版本漏洞合集

    1.PhpMyAdmin存在PREGREPLACEEVAL漏洞 影响版本: 3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 利用模块: exploit/mult ...

  8. 计划任务crond

    计划任务服务程序 计划任务分为以下两种情况:1.系统级别的定时任务:清理系统缓存临时文件清理系统信息采集日志文件切割 2.用户级别的定时任务:定时同步互联网时间定时备份系统配置文件定时备份数据库文件 ...

  9. 02-Java开发环境的配置

    在本章节中我们将为大家介绍如何搭建Java开发环境. Windows 上安装开发环境 window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www ...

  10. WebElement--定位经验

    通常,我们这页面中定位一个元素,如果HTML中明明有却定位不到,我们一定会从这两个方面考虑. 第一:是不是页面中有多个iframe/frame结构,很多情况下我们需要通过切换iframe/frame结 ...