转载请注明出处: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. C语言程序代写(Linux下线程)

    联系QQ:928900200 CSCI 3120 Operating Systems Summer 2014 Handout 3Assignment 2Date Due: June 5, 2014 b ...

  2. cocos2d-x学习过程中的疑问

    1.一个Scene中不同的层或者有几层Layer是在什么时候设置的? 2.helloWord中init()函数是有谁来调用的? 答:HelloWorld的init函数是在create函数调用后才会调用 ...

  3. HDU 4951 Multiplication table 阅读题

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4951 题意:给一个P进制的乘法表.行和列分别代表0~p-1,第i行第j*2+1和第j*2+2列代表的是第i ...

  4. 排列组合相关算法 python

    获取指定长度得全部序列 通过事件来表述这个序列,即n重伯努利实验(二项分布)的全部可能结果.比如时间a表示为: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 假设每次实验为从 ...

  5. php定时运行任务(windows7)

    1:自己写的php档,下面是我的一些php档 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzE2MDAyNA==/font/5a6L5L2T/f ...

  6. APK ubuntu下 数字签名

    Android系统要求每个Android应用程序必需要经过数字签名才可以安装到系统中,也就是说假设一个Android应用程序没有经过数字签名,是没有办法安装到系统中的! Android通过数字签名来标 ...

  7. Linux 下开启ssh服务(转)

    二.SSH SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目 ...

  8. 【原创】leetCodeOj --- Copy List with Random Pointer 解题报告

    题目地址: https://oj.leetcode.com/problems/copy-list-with-random-pointer/ 题目内容: A linked list is given s ...

  9. windows API与C#的数据类型对应关系表

    API与C#的数据类型对应关系表 API数据类型 类型描述 C#类型 API数据类型 类型描述 C#类型 WORD 16位无符号整数 ushort CHAR 字符 char LONG 32位无符号整数 ...

  10. 创建高性能移动 web 站点【转载】

    如果你的网站3秒钟没有响应,人们就会失去兴趣了.为了满足响应快这个愿望,需要一个不同的方法在手机上进行分析,设计和测试. 这篇文章将会对Johan Johansson在2013年4月提出"  ...