- 浏览: 59880 次
- 性别:
- 来自: 北京
文章分类
最新评论
1、意图
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。
2、动机
考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分上点击就可以得到帮助信息,所提供的帮助依赖于点击的是界面的哪一部分以及其上下文。例如,对话框中的按钮的帮助信息就可能和主窗口中类似的按钮不同。如果对那一部分界面没有特定的帮助信息,那么帮助系统应该显示一个关于当前上下文的较一般的帮助信息——比如说,整个对话框。
因此很自然地,应根据普遍性(generality)即从最特殊到最普通的顺序来组织帮助信息。而且,很明显,在这些用户界面对象中会有一个对象来处理帮助请求;至于是哪一个对象则取决于上下文以及可用的帮助具体到何种程度。
这儿的问题是提交帮助请求的对象(如按钮)并不明确知道是谁是最终提供帮助的对象。我们要有一种办法将提交帮助请求的对象与可能提供帮助信息的对象解耦(decouple)。Chain of Responsibility模式告诉我们应该怎么做。
这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接收者。该请求沿对项链直至其中的一个对象处理它,如下图所示。
从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它——我们说该请求有一个隐士接受者(implicit receiver)。
3、适用性
在以下条件下使用Responsibility链:
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
4、结构
5、参与者
Handle
——定义一个处理请求的接口
——(可选)实现后继链。
ConcreteHandler
——处理它所负责的请求
——可访问它的后继者
——如果可处理该请求,就处理之;否则将该请求转发给它的后继者。
Client
——向链上的具体处理者(ConcreteHandler)对象提交请求。
6.代码示例
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。
2、动机
考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分上点击就可以得到帮助信息,所提供的帮助依赖于点击的是界面的哪一部分以及其上下文。例如,对话框中的按钮的帮助信息就可能和主窗口中类似的按钮不同。如果对那一部分界面没有特定的帮助信息,那么帮助系统应该显示一个关于当前上下文的较一般的帮助信息——比如说,整个对话框。
因此很自然地,应根据普遍性(generality)即从最特殊到最普通的顺序来组织帮助信息。而且,很明显,在这些用户界面对象中会有一个对象来处理帮助请求;至于是哪一个对象则取决于上下文以及可用的帮助具体到何种程度。
这儿的问题是提交帮助请求的对象(如按钮)并不明确知道是谁是最终提供帮助的对象。我们要有一种办法将提交帮助请求的对象与可能提供帮助信息的对象解耦(decouple)。Chain of Responsibility模式告诉我们应该怎么做。
这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接收者。该请求沿对项链直至其中的一个对象处理它,如下图所示。
从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它——我们说该请求有一个隐士接受者(implicit receiver)。
3、适用性
在以下条件下使用Responsibility链:
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
4、结构
5、参与者
Handle
——定义一个处理请求的接口
——(可选)实现后继链。
ConcreteHandler
——处理它所负责的请求
——可访问它的后继者
——如果可处理该请求,就处理之;否则将该请求转发给它的后继者。
Client
——向链上的具体处理者(ConcreteHandler)对象提交请求。
6.代码示例
package chainofresp; abstract class Logger { public static int ERR = 3; public static int NOTICE = 5; public static int DEBUG = 7; protected int mask; // The next element in the chain of responsibility protected Logger next; public void setNext(Logger log) { next = log; } public void message(String msg, int priority) { if (priority <= mask) { writeMessage(msg); } if (next != null) { next.message(msg, priority); } } abstract protected void writeMessage(String msg); } class StdoutLogger extends Logger { public StdoutLogger(int mask) { this.mask = mask; } protected void writeMessage(String msg) { System.out.println("Writing to stdout: " + msg); } } class EmailLogger extends Logger { public EmailLogger(int mask) { this.mask = mask; } protected void writeMessage(String msg) { System.out.println("Sending via email: " + msg); } } class StderrLogger extends Logger { public StderrLogger(int mask) { this.mask = mask; } protected void writeMessage(String msg) { System.err.println("Sending to stderr: " + msg); } } public class ChainOfResponsibilityExample { private static Logger createChain() { // Build the chain of responsibility Logger logger = new StdoutLogger(Logger.DEBUG); Logger logger1 = new EmailLogger(Logger.NOTICE); logger.setNext(logger1); Logger logger2 = new StderrLogger(Logger.ERR); logger1.setNext(logger2); return logger; } public static void main(String[] args) { Logger chain = createChain(); // Handled by StdoutLogger (level = 7) chain.message("Entering function y.", Logger.DEBUG); // Handled by StdoutLogger and EmailLogger (level = 5) chain.message("Step1 completed.", Logger.NOTICE); // Handled by all three loggers (level = 3) chain.message("An error has occurred.", Logger.ERR); } } /* The output is: Writing to stdout: Entering function y. Writing to stdout: Step1 completed. Sending via e-mail: Step1 completed. Writing to stdout: An error has occurred. Sending via e-mail: An error has occurred. Writing to stderr: An error has occurred. */
发表评论
-
STRATEGY(策略)——对象行为型模式
2013-06-17 16:19 6451、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
STATE(状态)—— 对象行为型模式
2013-06-14 16:49 7391、意图 允许一个 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 6421、意图 定义对象 ... -
MEDIATOR(中介者)——对象行为型模式
2013-06-09 16:17 6491、意图 用一个中 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7251、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 6671、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7211、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 6951、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
设计模式的三大分类解析
2013-05-24 14:48 806设计模式在功能上 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 6701、意图 定义一个 ... -
ADAPTER(适配器) --- 类对象结构型模式
2013-03-28 11:33 5581、意图 将一个类的接口转化成客户希望的另外一个接口。 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7041、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 6911、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 8541、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 5961、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6501、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7331. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 6721、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 6841、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 727本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) (Level 300)
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式)
C#面向对象设计模式 (行为型模式) Chain Of Responsibility 职责链模式 视频讲座下载
chain of responsibility 职责链模式(行为模式)来自于Microsoft官方网站视频教程,详细介绍了职责链模式的运用,且在本人提供的资源里可以下载到相关的PDF辅助文档帮助
C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility 职责链模式
C#面向对象设计模式 Chain of Responsibility 职责链模式 视频讲座下载
5.1 CHAIN OF RESPONSIBIL ITY(职责链)——对象行为型模式 5.2 COMMAND(命令)——对象行为型模式 5.3 INTERPRETER(解释器)——类行为型模式 5.4 ITERATOR(迭代器)——对象行为型模式 5.5 MEDIATOR(中介者)...
23种设计模式之二十一(行为模式)Chain of Responsibility模式
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) C#面向对象设计模式纵横谈(15):(行为型模式) Command 命令模式 C#面向对象设计模式纵横谈(16):(行为型模式) Interpreter 解释...
设计模式C++学习之责任链模式(Chain of Responsibility)
责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。 使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有...
【Java设计模式】(3)责任链Chain of Responsibility源码
职责链模式 设计模式 Chain of Responsibility 若有问题望指出。
5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为型模式 147 5.2 COMMAND(命令)—对象行为型 模式 154 5.3 INTERPRETER(解释器)—类行为型 模式 162 5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 ...
Chain Of Responsibility.rar
用C++简单的实现职责链(Chain of Responsibility)。
NULL 博文链接:https://linkcqu.iteye.com/blog/355806
C++设计模式课件22_Chain Of Resposibility_职责链.pdf
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 职责链模式的一个...