Java设计模式偷跑系列(十八)建模和责任链模式的实现
转载请注明出处: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设计模式偷跑系列(十八)建模和责任链模式的实现的更多相关文章
- Java设计模式偷跑系列(十二)组合模式建模和实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39828653 组合模式(Composite):组合模式有时又叫部分-总体模式.将对象组合成 ...
- Java设计模式偷跑系列(六)Singleton模式的建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种经常使用的设计模式. 在Java应用中 ...
- Java设计模式偷跑系列(21)建模和实现享受metapatterns
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40021651 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象. ...
- Java 设计模式系列(二二)责任链模式
Java 设计模式系列(二二)责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求 ...
- 十四、ChainOfResponsibility 责任链模式
设计: 代码清单: Trouble: public class Trouble { private int number; public Trouble(int number){ this.numbe ...
- 设计模式之二十:责任链模式(Chain of Responsibility)
感觉这个设计模式和组合模式一样是一种非常巧妙的设计模式,在须要使用它的地方假设不使用这样的设计模式代码会变的非常复杂,可是这样的设计模式的基本原理又是非常easy的. 责任链模式: 通过使多个对象都有 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】
<Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- Java设计模式十九——责任链模式
责任链模式 老李的苦恼 每个人在出生的时候,都早已在暗中被标好了三六九等. 老李是一名建筑工地的木匠,和大多数生活在社会最底层的农民工一样,一辈子老实本分,胆小怕事.在他们的心中,谁当老爷都没有区别, ...
随机推荐
- 比較Swift与HDFS话Ceph本质(by quqi99)
作者:张华 发表于:2014-06-21版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99 ) 作者将又 ...
- 为Linux用ISO制作U盘启动及基本原理
制作成功后的基本最简文件夹文件图 一.系统的基本引导流程: 首先系统要引导isolinux.bin可执行程序,此程序是移动介质上引导用的,isolinux.bin执行成功后会载入其配置文件syslin ...
- javascript---在自由落体实现
实现一些简单的物业自由落体需要理解: clientHeight:浏览器客户机的整体高度 offsetHeight:物(实例div)高低 offsetTop:从对象client最顶层的距离 简单demo ...
- MVC模型与FishiGUI应用层MVC型号
MVC概要: MVC (Modal View Controler)M是指数据模型,V是指用户界面,C则是控制器. 使用MVC的目的是将M和V的实现代码分离,从而使同一个程序能够使用不同的表现形式.比方 ...
- Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画
这几天在看控件类,临时没有想好实际运用的方向.单纯的创建网上已经有非常多这方面的样例,我就不写了.接下来是学习精灵类.精灵类若是单独学习也是非常easy.于是我加了一些有关动画方面的知识点与精灵 ...
- 左右xcode的重构选项的一些理解
Rename(重命名):对标示符进行重命名,以获得更好的代码可读性,这些标示符包含类,方法或者函数的名称. Extract(抽取):将你在XCode种选择的代码抽取到一个新的方法或函数中. Creat ...
- sql中 in 、not in 、exists、not exists 使用方法和区别
% 的一类. NOT IN:通过 NOT IN keyword引入的子查询也返回一列零值或很多其它值. 以下查询查找没有出版过商业书籍的出版商的名称. SELECT pub_name FROM pub ...
- jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局
之前在网上看到这样的效果,但我没有收藏夹网址,后来被我不知道如何来实现这种效果. 如今,互联网已收集有关专门.真是功夫不负有心人,被我发现. 我也努力过自己尝试着写: 但仅仅是单纯的图片放大.并且还影 ...
- JTable demo
简单讲就是在没有使用layout manager的时候用setSize,在使用了layout manager 的时候用setPreferredSize 并且setPreferredSize通常和set ...
- 文件翻译002片:Process Monitor帮助文档(Part 2)
[筛选亮点] Process Monitor提供了一些方式来配置筛选器和高亮显示. 筛选器的包括与排除 您能够在筛选器中指定事件的属性,这样就能够令Process Monitor仅显示 ...