责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任
我的理解是:消息在链上不断的传递,直到遇到一个可以处理此消息的处理器,【这个处理器在链上】
或者说,消息本身带有等级,每一个处理器只能处理相应等级的消息。只有消息可以被处理的时候,不会在链上传播,否则这个消息会在链上一直传播.
责任链模式涉及到的角色如下所示:
●抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
●具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
Example: 测试人员针对于当前测试的系统会提一些bug,当bug等级为低的时候初级程序员就可以修复
等级为中等的时候需要中级程序员来修复,等缓为高级的时候就需要强力大牛来解决,我们
通过责任链来实现这一功能
1. 处理器
/** * 处理器 */ public abstract class Handler { private Handler nextHandler;//下一个处理者 public Handler getNextHandler() { return nextHandler; } public void setNextHandler(Handler nextHandler) { this.nextHandler = nextHandler; } abstract void handleRequest(int bugLevel); //处理请求的方法 }
2. 初级程序员
public class JuniorProgrammer extends Handler{ @Override void handleRequest(int bugLevel) { if(1==bugLevel){ System.out.println("bug等级为低级,初级程序员可以完成"); }else{ //将bug传给中级程序员 System.out.println("bug等级太高,初级程序员处理不了,给中级程序员"); getNextHandler().handleRequest(bugLevel); } System.out.println("------------------------"); } }
3.中级程序员
public class IntermediateProgrammer extends Handler{ @Override void handleRequest(int bugLevel) { if(2==bugLevel){ System.out.println("bug等级中级,中级程序员可以完成"); }else{ //将bug传给高级程序员 System.out.println("bug等级太高,中级程序员处理不了,给高级程序员"); getNextHandler().handleRequest(bugLevel); } System.out.println("------------------------"); } }
4. 高级程序员
public class SeniorProgrammer extends Handler { @Override void handleRequest(int bugLevel) { if (3 == bugLevel) { System.out.println("bug等级高级,大牛亲自出马"); } else { // 将bug传给谁 if (null != getNextHandler()) { getNextHandler().handleRequest(bugLevel); } else { System.out.println("bug太严重了,大牛也处理不了"); } } } }
5. 测试人员
/** * 测试人员 */ public class Testor { public static int giveBug(int bugLevel){//专门提bug return bugLevel; } }
6.运行类
public class Main { public static void main(String[] args) { Handler junior = new JuniorProgrammer(); Handler intermediate = new IntermediateProgrammer(); Handler senior = new SeniorProgrammer(); junior.setNextHandler(intermediate); intermediate.setNextHandler(senior); //测试人员提bug,苦逼程序员开始改bug喽 junior.handleRequest(Testor.giveBug(1)); junior.handleRequest(Testor.giveBug(2)); junior.handleRequest(Testor.giveBug(3)); junior.handleRequest(Testor.giveBug(4)); } }
结果:
bug等级为低级,初级程序员可以完成
------------------------
bug等级太高,初级程序员处理不了,给中级程序员
bug等级中级,中级程序员可以完成
------------------------
------------------------
bug等级太高,初级程序员处理不了,给中级程序员
bug等级太高,中级程序员处理不了,给高级程序员
bug等级高级,大牛亲自出马
------------------------
------------------------
bug等级太高,初级程序员处理不了,给中级程序员
bug等级太高,中级程序员处理不了,给高级程序员
bug太严重了,大牛也处理不了
------------------------
------------------------
补:
纯的与不纯的责任链模式
一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,而是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又 把责任向下传的情况。
在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。
纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。有些人认为不纯的责任链根本不是责任链模式,这也许是有道理的。但是在实际的系统里,纯的责任链很难找到。如果坚持责任链不纯便不是责任链模式,那么责任链模式便不会有太大意义了。
现在想想,责任链模式,比较像数据结构中的链表
本人也是初学,HY批评指正,共同进步!
文档源文档 <http://blog.csdn.net/m13666368773/article/details/7702368> ,此处致谢
相关推荐
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
设计模式之责任链模式Java版本实现和UML类图设计
java设计模式之责任链模式,从实际生活入手说明责任链模式的原理。
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
ios平台中通过最简单的代码讲解责任链模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
这个资源就是让你掌握责任链模式的原理和运用,你值得拥有,好好学习,天天向上。
实验十:责任链模式.rar之java设计模式实验十:责任链模式.rar之java设计模式
责任链模式(Chain) 用意:避免请求发送者与接受者耦合在一起,让多个对象连接成一条链,并且沿关这条链传递请求,直至有对象处理他为止。
23种设计模式之责任链模式对责任链模式进行了简单的介绍,并附带了例子程序,和大家分享
责任链模式 13.命令模式 14.解释器模式 15.迭代器模式 16.调停者模式 17.备忘录模式 18.观察者模式 19.策略模式 20.状态模式 21.模板模式 22.访问者模式 最后,还附带一个关于“分派”的章节!为了读者对...
设计模式C++学习之责任链模式(Chain of Responsibility)
设计模式的责任链模式的例子,希望对大家有用~~~~~~~~
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
设计模式责任链相关的Simple
java常用设计模式-责任链模式
2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...
压缩包里是我自己写的管道模式、单例模式的代码;你需要copy到你自己eclipse建的工程文件中。另外,我把我的代码说明,写在了readme.txt文件里,偷懒以及求快的人看看...如果有问题,可留言。另外我分数高,但绝对有...