转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231

责任链模式(ChainOfResponsibility): 有多个对象,每一个对象持有下一个对象的引用,形成一条链。请求在这条链上传递。直到某一对象决定处理该请求,可是发出者并不清楚终于哪个对象会处理该请求。

一、uml建模:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGh5X3ljdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

二、代码实现

/**
* 责任链模式:有多个对象。每一个对象持有下一个对象的引用,形成一条链,
*
* 请求在这条链上传递,直到某一对象决定处理该请求,
*
* 可是发出者并不清楚终于哪个对象会处理该请求。
*/
interface Handler {
public void operator();
} /**
* 这里单独对Handler进行封装,方便改动引用对象
*/
abstract class AbstractHandler implements Handler {
private Handler handler; public Handler getHandler() {
return handler;
} public void setHandler(Handler handler) {
this.handler = handler;
}
} class MyHandler extends AbstractHandler implements Handler {
private String name; public MyHandler(String name) {
this.name = name;
} @Override
public void operator() {
if (getHandler() != null) {
System.out.print(name + ",将BUG交给——>");
/**
* 这里是关键。 【注意1】这里不是递归哦~
*
* 递归:A(operator)——>A(operator)——>A(operator)
*
* 责任链:A(operator)——>B(operator)——>C(operator)
*/
getHandler().operator();
} else {
System.out.println(name + "处理BUG...\n");
}
}
} /**
* client測试类
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
MyHandler handler1 = new MyHandler("技术总监");
MyHandler handler2 = new MyHandler("项目经理");
MyHandler handler3 = new MyHandler("程序猿");
/**
* 假设没有下家,将会自行处理
*
* 打印结果:技术总监处理BUG...
*/
handler1.operator();
/**
* 仅仅要有下家,就传给下家处理
*
* 以下的打印结果:技术总监,将BUG交给——>项目经理。将BUG交给——>程序猿处理BUG...
*
* 就这样,原本是技术总监自行处理的BUG,如今一层一层的把责任推给了程序猿去处理
*/
handler1.setHandler(handler2);
handler2.setHandler(handler3);
/**
* 透过打印结果能够知道:MyHandler实例化后将生成一系列相互持有的对象(handler)。构成一条链。
*/
handler1.operator();
/**
* 【注意2】责任链不是链表:链表有个头结点,咱每次必须通过头结点才干訪问后面的节点
*
* 而责任链它能够从头訪问。也能够从中间開始訪问,如:handler2.operator();
*/ }
}

三、总结

1、责任链模式能够实现,在隐瞒client(不知道详细处理的人是谁)的情况下,对系统进行动态的调整。

2、链接上的请求能够是一条链。能够是一个树,还能够是一个环,模式本身不约束这个,须要自己去实现。同一时候,在一时间,命令只同意把对象和目标。而不是同意大量对象。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Java设计模式偷跑系列(十八)建模和责任链模式的实现的更多相关文章

  1. Java设计模式偷跑系列(十二)组合模式建模和实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39828653 组合模式(Composite):组合模式有时又叫部分-总体模式.将对象组合成 ...

  2. Java设计模式偷跑系列(六)Singleton模式的建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种经常使用的设计模式. 在Java应用中 ...

  3. Java设计模式偷跑系列(21)建模和实现享受metapatterns

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40021651 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象. ...

  4. Java 设计模式系列(二二)责任链模式

    Java 设计模式系列(二二)责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求 ...

  5. 十四、ChainOfResponsibility 责任链模式

    设计: 代码清单: Trouble: public class Trouble { private int number; public Trouble(int number){ this.numbe ...

  6. 设计模式之二十:责任链模式(Chain of Responsibility)

    感觉这个设计模式和组合模式一样是一种非常巧妙的设计模式,在须要使用它的地方假设不使用这样的设计模式代码会变的非常复杂,可是这样的设计模式的基本原理又是非常easy的. 责任链模式: 通过使多个对象都有 ...

  7. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】

    <Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  8. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

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

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

随机推荐

  1. linux下一个C语言flock功能使用 .

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依參数operation所指 ...

  2. Codeforces 107B Basketball Team 简单概率

    题目链接:点击打开链接 题意: 给定n m h 表示有m个部门,有个人如今在部门h 以下m个数字表示每一个部门的人数.(包含他自己) 在这些人中随机挑选n个人,问挑出的人中存在和这个人同部门的概率是多 ...

  3. Android学习路径(23)应用Fragment建立动态UI——Fragment之间的通信

    为了要重用Fragment的UI组件.你应该为它们每个都构建一个完整独立的,模块化的组件来定义他自身的布局和行为. 一旦你定义了这些可重用的Fragments.你能够通过activity关联它们同一时 ...

  4. hdu 2391 Filthy Rich

    单纯dp 水一 处理时间点,第一行和第一列特殊处理: 其余的w[i][j]=show(w[i-1][j-1],w[i-1][j],w[i][j-1]); <span style="fo ...

  5. HDU 4883 Best Coder Round 2 TIANKENG’s restaurant 解读

    有一组数据是在客人到达和出发时间,问:多少把椅子的能力,以满足所有客人的需求,可以有一个地方坐下要求. 有些人甚至开始考虑暴力法,这些数据是少,其实这个问题很多数据, 暴力需求O(n*n)的时间效率, ...

  6. 重新想象 Windows 8 Store Apps (33) - 关联启动: 使用外部程序打开一个文件或uri, 关联指定的文件类型或协议

    原文:重新想象 Windows 8 Store Apps (33) - 关联启动: 使用外部程序打开一个文件或uri, 关联指定的文件类型或协议 [源码下载] 重新想象 Windows 8 Store ...

  7. android下调试声卡驱动之概述

    在Android中音频系统使用的是ALSA系统架构.ASoC--ALSA System on Chip .是建立在标准ALSA驱动层上,为了更好地支持 嵌入式处理器和移动设备中的音频Codec的一套软 ...

  8. android-sdk-windows下载版

    Android SDK 4.0.3 开发和执行环境配置 近期又装了一次最新版本号的ADK环境 眼下最新版是Android SDK 4.0.3 本文的插图和文本尽管是Android2.2的 步骤都是一样 ...

  9. 点击搜索取消UISearchDisplayController的搜索状态

    一般,我们用到UISearchDisplayController的时候,都是须要对一个数据源进行刷选,在UISearchDisplayController自带的tableView中展示出来,然后点击退 ...

  10. HDU 4508 沼泽湿地系列故事——记住减肥I (2013腾讯编程马拉松预赛第一)

    pid=4508">http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n開始,表示每天的食物清 ...