1.意图

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

2.别名

3.动机

考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分上点击就能够以得到帮助信息,所提供的帮助依赖于点击的是界面的哪一部分以及其上下文。

4.适用性

下面情况使用Responsibility模式:

  • 有多个的对象能够处理一个请求,哪个对象处理该请求执行时刻自己主动确定。

  • 你想在不明白指定接收者的情况下,向多个对象中的一个提交一个请求。

  • 可处理一个请求的对象集合应被动态指定。

5.结构

接下来我们将要谈谈责任链模式,有多个对象。每一个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。可是发出者并不清楚究竟终于那个对象会处理该请求,所以,责任链模式能够实现。在隐瞒client的情况下。对系统进行动态的调整。先看看关系图:



Abstracthandler类提供了get和set方法,方便MyHandle类设置和改动引用对象。MyHandle类是核心,实例化后生成一系列相互持有的对象。构成一条链。

6.代码演示样例

实现代码:

一个接口:

public interface Handler {
public void operator();
}

实现:

public abstract class AbstractHandler {

    private Handler handler;

    public Handler getHandler() {
return handler;
} public void setHandler(Handler handler) {
this.handler = handler;
} } public class MyHandler extends AbstractHandler implements Handler { private String name; public MyHandler(String name) {
this.name = name;
} @Override
public void operator() {
System.out.println(name+"deal!");
if(getHandler()!=null){
getHandler().operator();
}
}
}
測试类:

public class Test {

public static void main(String[] args) {
MyHandler h1 = new MyHandler("h1");
MyHandler h2 = new MyHandler("h2");
MyHandler h3 = new MyHandler("h3"); h1.setHandler(h2);
h2.setHandler(h3); h1.operator();
}

}

“`

输出:

h1deal!

h2deal!

h3deal!

此处强调一点就是。链接上的请求能够是一条链,能够是一个树。还能够是一个环,模式本身不约束这个。须要我们自己去实现,同一时候,在一个时刻,命令仅仅同意由一个对象传给还有一个对象。而不同意传给多个对象。

7.相关模式

  • 职责链常与Composite一起使用。这样的情况下,一个构件的父构件可作为它的后继。

引用:

http://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm

http://item.jd.com/10057319.html

http://blog.csdn.net/zhangerqing/article/details/8239539

Behavioral模式之Chain of Responsibility模式的更多相关文章

  1. Java设计模式(14)责任链模式(Chain of Responsibility模式)

    Chain of Responsibility定义:Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合, ...

  2. 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)

    模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...

  3. 设计模式:职责链模式(Chain Of Responsibility)

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

  4. Chain of Responsibility模式

    熟悉VC/MFC的都知道,VC是“基于消息,事件驱动”,消息在VC开发中起着举足轻重的作用.MFC提供了消息的处理的链式处理策略,处理消息的请求将沿着预定好的路径依次进行处理.消息的发送者并不知道该消 ...

  5. 第22章 职责链模式(Chain of Responsibility)

    原文 第22章 职责链模式(Chain of Responsibility) 职责链模式 导读:职责链模式是一个既简单又复杂的设计模式,刚开始学习这个设计模式的时候光示例都看了好几遍.就为了理清里面的 ...

  6. 职责链模式(Chain of Responsibility)的Java实现

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

  7. 责任链模式(Chain of Responsibility)

    责任链模式(Chain of Responsibility)接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求 ...

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

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

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

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

随机推荐

  1. 使用plsql导入dmp文件缺少imp*.exe

    在C:\app\Administrator\product\11.2.0\client_2\BIN 找到imp.exe 导入

  2. js 上传头像img

    <label> <div class="myusercenter-image-none"> <img src="" class=& ...

  3. spring注解开发-AOP(含原理)

    一:AOP基本使用 AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式: 步骤一:导入aop模块:Spring AOP:(spring-aspects) <depen ...

  4. python虚拟环境的搭建及作用

    Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter.虚拟环境的好处是 ...

  5. JS模块之AMD, CMD, CommonJS、UMD和ES6模块

    CommonJS 传送门 同步加载,适合服务器开发,node实现了commonJS.module.exports和require 判断commonJS环境的方式是(参考jquery源码): if ( ...

  6. MySQL 优化 之 Copying to tmp table on disk

    项目中遇到了慢查询问题 Sql语句 SELECT sum(price) AS price, `member_id` FROM `crm_upload` GROUP BY member_id ORDER ...

  7. python 学习总结3

    Python蟒蛇绘制 一.实现程序如下 import turtle turtle.setup (650, 350, 200, 200)#turtle的绘图窗体turtle.setup(width, h ...

  8. LINUX常见小问题汇总

    1. crontab的备份与恢复 备份crontab文件: crontab -l > $HOME/mycron 恢复丢失的crontab文件: 如果不小心误删了crontab文件,假设你在自己的 ...

  9. CU论坛常用知识点汇总

    1.正则表达式详解 http://bbs.chinaunix.net/thread-63273-1-1.html http://bbs.chinaunix.net/thread-605570-1-1. ...

  10. .NET Core使用EPPlus简单操作Excel(简单实现导入导出)

    1.前言 EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件,在导出Excel的时候不需要电脑上安装office,它的一个缺 ...