原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11407114.html 

1.定义

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

2.结构图

Handler:定义职责的接口,通常在这里定义处理请求的方法,可以在这里实现后继链。
ConcreteHandler:实现职责的类,在这个类中,实现对在它职责范围内请求的处理,如果处理,就继续转发请求给后继者。
Client:职责链的客户端,向链上的具体处理对象提交请求,让职责链负责处理。

3.本质

职责链模式的本质:分离职责,动态组合。

4.Code Demo

Handler.java

 package org.fool.dp.cor;

 public abstract class Handler {
protected Handler successor; public void setSuccessor(Handler successor) {
this.successor = successor;
} public abstract void handleRequest();
}

ConcreteHandler1.java

 package org.fool.dp.cor;

 public class ConcreteHandler1 extends Handler {
@Override
public void handleRequest() {
boolean someCondition = false; if (someCondition) {
System.out.println("ConcreteHandler1 invoked...");
} else {
if (successor != null) {
successor.handleRequest();
}
}
}
}

ConcreteHandler2.java

 package org.fool.dp.cor;

 public class ConcreteHandler2 extends Handler {
@Override
public void handleRequest() {
boolean someCondition = false; if (someCondition) {
System.out.println("ConcreteHandler2 invoked...");
} else {
if (successor != null) {
successor.handleRequest();
}
}
}
}

ConcreteHandler3.java

 package org.fool.dp.cor;

 public class ConcreteHandler3 extends Handler {
@Override
public void handleRequest() {
boolean someCondition = true; if (someCondition) {
System.out.println("ConcreteHandler3 invoked...");
} else {
if (successor != null) {
successor.handleRequest();
}
}
}
}

Client.java

 package org.fool.dp.cor;

 public class Client {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3(); handler1.setSuccessor(handler2);
handler2.setSuccessor(handler3); handler1.handleRequest();
}
}

职责链模式ChainOfResponsibility的更多相关文章

  1. 【设计模式】—— 职责链模式ChainOfResponsibility

    前言:[模式总览]——————————by xingoo 模式意图 避免请求的发送者,和接受者过度的耦合在一起.一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心.而请 ...

  2. OOP设计模式[JAVA]——03职责链模式

    职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...

  3. 设计模式24---设计模式之职责链模式(Chain of Responsibility)(行为型)

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

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

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

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

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

  6. JavaScript之职责链模式

    一.概述 职责链模式(Chain of responsibility),就是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有 ...

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

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

  8. php实现设计模式之 职责链模式

    <?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 * 抽象 ...

  9. Filter体现职责链模式

    1. 前言 Filter—Filter 技术是servlet2.3 新增加的功能.完成的流程:对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后 ...

随机推荐

  1. Sublime Text3添加C++编译与运行

    安装MinGW 1.安装MinGW ,其安装方法一直下一步,安装完后点Continue会出现一个窗口,在Basic Setup下标记所有包,然后在菜单里点"Apply Changes&quo ...

  2. js 自定义map

    <script> function HashMap(){this.map = {};} HashMap.prototype = { put : function(key, value){ ...

  3. 【Http2.0】Http2.0

    序言 目前HTTP/2.0(简称h2)已经在广泛使用(截止2018年8月根据Alexa流行度排名的头部1千万网站中,h2占比约29%,https://w3techs.com/technologies/ ...

  4. 系统信息&&硬件信息查看

    系统信息&&硬件信息查看 一系统信息查看 (一)查看系统版本信息 [root@centos7 ~]# cat /etc/redhat-release CentOS Linux rele ...

  5. Yii2 $app总结

    //验证登陆 Yii::$app->user->isGuest; //当前user的id Yii::$app->user->id; //当前controller的名称 Yii: ...

  6. PHP curl_copy_handle函数

    curl_copy_handle — 复制一个cURL句柄和它的所有选项 说明 resource curl_copy_handle ( resource $ch ) 复制一个cURL句柄并保持相同的选 ...

  7. Invalid bound statement (not found)错误

    都对着,为什么会报这个错呢,mapper也拿到了,为什么查询时出错呢,最后看target里编译的文件发现少了mapping,xml没编译过去. 我的目录结构:dao层都编译过去了,但mapper.xm ...

  8. delphi 判断MDI窗体的子窗体是否存在

    //***************************************************************************//函 数名: CreateForm //返 ...

  9. JVM调优(二)——基于JVisualVM的可视化监控

    JVM调优(二)--基于JVisualVM的可视化监控 工具路径://java/jdk1.8xxx/bin/JVisuaVM.exe 监控本地的Tomcat 监控远程Tomcat 监控普通的JAVA进 ...

  10. SQL语言分类DDL、DML、DQL、TCL、DCL

    关系型数据库的SQL语句都可以分为4大类: 1. DDL(数据定义语言)     DDL 主要是指如下的四种SQL 语句,以 CREATE.DROP.ALRET开头和 TRUNCATE TABLE 语 ...