- 浏览: 440124 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (162)
- easymock (3)
- 模板引擎 (3)
- JForum (4)
- web (9)
- spring (10)
- java (20)
- struts (9)
- uml (3)
- java pattern (19)
- JQuery (14)
- 多线程 (13)
- database (21)
- PS (3)
- ejb (6)
- 版本管理 svn , maven , ant (2)
- protocol (1)
- 测试 (1)
- ws (7)
- Apache (4)
- 脚本语言 (1)
- guice (1)
- 分布式 (4)
- 架构 (0)
- 经验 (1)
- 版本管理 svn (1)
- maven (1)
- ant (1)
- 书籍 (1)
- Linux (1)
最新评论
-
Master-Gao:
稍微明白了点,,有点萌萌哒
为什么匿名内部类参数必须为final类型 -
waw0931:
终于明白了,谢谢!
为什么匿名内部类参数必须为final类型 -
十三圆桌骑士:
提供了两个链接还是有用的。
安装Mondrian -
放方芳:
[flash=200,200][/flash]
Freemarker标签使用 -
放方芳:
[b][/b]
Freemarker标签使用
动机:
在开发过程中有一种情况:一个事件产生一个请求,这个请求需要很多对象来处理它,更极端一点,我们不能直接访问这些对象。这种情况下我们有两种解决方案:
1、让这些对象变成public,创建这些对象的引用,然后处理这个请求
2、使用责任链模式
在责任链模式中,一组处理请求的对象构成一条链子,每个对象都可以处理请求而且持有下个对象的引用,请求从一个对象传递到下一个对象,直到处理完这个请求。
意义或者作用:
1、避免请求发送者直接依赖所有接受者对象,达到解耦的目的。
2、所有接受者对象都成为链的一部分,请求在这些对象中传递直到某个对象解决掉请求
使用场景或者条件:
1、有多个handler可以处理一条命令
2、预先不知道哪个handler来处理,到底使用哪个handler应该由handler内部处理方法自动地确定
3、请求应该发送到一组handler,而不是某个handler
UML结构图:
-
RequestHandler - handles the requests it is responsible for
- If it can handle the request it does so, otherwise it sends the request to its successor
附上一个例子:
public class Request { private int m_value; private String m_description; public Request(String description, int value) { m_description = description; m_value = value; } public int getValue() { return m_value; } public String getDescription() { return m_description; } } public abstract class Handler { protected Handler m_successor; public void setSuccessor(Handler successor) { m_successor = successor; } public abstract void handleRequest(Request request); } public class ConcreteHandlerOne extends Handler { public void handleRequest(Request request) { if (request.getValue() < 0) { //if request is eligible handle it System.out.println("Negative values are handled by ConcreteHandlerOne:"); System.out.println("\tConcreteHandlerOne.HandleRequest : " + request.getDescription() + request.getValue()); } else { super.m_successor.handleRequest(request); } } } public class ConcreteHandlerThree extends Handler { public void handleRequest(Request request) { if (request.getValue() >= 0) { //if request is eligible handle it System.out.println("Zero values are handled by ConcreteHandlerThree:"); System.out.println("\tConcreteHandlerThree.HandleRequest : " + request.getDescription() + request.getValue()); } else { super.m_successor.handleRequest(request); } } } public class ConcreteHandlerTwo extends Handler { public void handleRequest(Request request) { if (request.getValue() > 0) { //if request is eligible handle it System.out.println("Positive values are handled by ConcreteHandlerTwo:"); System.out.println("\tConcreteHandlerTwo.HandleRequest : " + request.getDescription() + request.getValue()); } else { super.m_successor.handleRequest(request); } } } public class Main { public static void main(String[] args) { // Setup Chain of Responsibility Handler h1 = new ConcreteHandlerOne(); Handler h2 = new ConcreteHandlerTwo(); Handler h3 = new ConcreteHandlerThree(); h1.setSuccessor(h2); h2.setSuccessor(h3); // Send requests to the chain h1.handleRequest(new Request("Negative Value ", -1)); h1.handleRequest(new Request("Negative Value ", 0)); h1.handleRequest(new Request("Negative Value ", 1)); h1.handleRequest(new Request("Negative Value ", 2)); h1.handleRequest(new Request("Negative Value ", -5)); } }
发表评论
-
访问者模式 Visitor(转)
2012-06-25 14:49 1172一、引子 对于系统中一个已经完成的类层次结构,我们已 ... -
策略模式 Strategy
2012-06-21 10:30 989策略模式(Strategy):它定义了一系列的算法,并将每一个 ... -
模板方法模式 Template Method
2012-06-21 10:21 889GOF给模板方法(Template Method)模式定义一个 ... -
状态模式 State
2012-06-19 15:37 1023State模式的定义: 不同的 ... -
备忘录模式 Memento(转)
2012-06-19 14:11 0备忘录模式(Memento) 属于对象的行为模式。 ... -
中介者模式 Mediator (转)
2012-06-19 11:11 0一、中介者模式简介 ... -
迭代器模式 iterator
2012-06-18 14:58 3274一、 引言 迭代这个名词对于熟悉Java的人来说绝对不陌 ... -
解释器模式 interpreter(转)
2012-06-18 13:48 0Interpreter模式也叫解释器模式,是由GoF提出的23 ... -
享元模式 flyweight
2012-06-14 15:45 909个人理解:当系统内部需要使用大量的细粒度对象时,内存中每种类型 ... -
外观模式 Facade
2012-06-13 16:02 937先做个总结: 外观模式就是提供一个高层接口来集成、制定、调用 ... -
组合模式(Composite)
2012-06-13 15:33 2197The figure below shows a UML cl ... -
适配器模式(Adapter )
2012-06-13 14:46 949Adapter - Convert the interfac ... -
Bridge桥接模式
2012-06-08 15:24 758Bridge桥接模式是一种结构型模式,它主要应对的是:由于类 ... -
代理模式
2012-06-08 11:06 779代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引 ... -
设计模式(Design Pattern)的原则
2012-06-08 11:00 836设计模式(Design Pattern)的原则 1、&q ... -
原型模式 Prototype Pattern
2012-03-30 18:34 1146一. 原型模式简介 ... -
设计模式之Decorator
2012-03-30 16:44 793设计模式之Decorator(油漆工) ... -
命令模式
2011-12-09 15:35 787优点: 解耦了发送者和接受者之间联系。 发送者调用一个 ... -
观察者模式
2011-12-09 10:50 941Define a one-to-many depend ... -
抽象工厂 理解
2011-10-14 18:22 982抽象工厂模式 抽象工厂模式(英语:Abstra ...
相关推荐
设计模式C++学习之责任链模式(Chain of Responsibility)
C#面向对象设计模式 Chain of Responsibility 职责链模式 视频讲座下载
【Java设计模式】(3)责任链Chain of Responsibility源码
23种设计模式之二十一(行为模式)Chain of Responsibility模式
C#面向对象设计模式 (行为型模式) Chain Of Responsibility 职责链模式 视频讲座下载
NULL 博文链接:https://stelin.iteye.com/blog/932101
责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。 使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有...
C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility 职责链模式
NULL 博文链接:https://linkcqu.iteye.com/blog/355806
主要介绍了Java设计模式之责任链模式(Chain of Responsibility模式)介绍,本文讲解了如何使用责任链模式,并给出了4种使用实例,需要的朋友可以参考下
chain of responsibility 职责链模式(行为模式)来自于Microsoft官方网站视频教程,详细介绍了职责链模式的运用,且在本人提供的资源里可以下载到相关的PDF辅助文档帮助
chain-of-responsibility-demo 责任链模式demo
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) (Level 300)
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式)
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
Chain Of Responsibility.rar
NULL 博文链接:https://gary0416.iteye.com/blog/913457
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递...
职责链模式 设计模式 Chain of Responsibility 若有问题望指出。