设计模式——17、责任链模式(Chain of Responsibility)

17、责任链模式(Chain of Responsibility)
接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。
Abstracthandler类提供了get和set方法,方便MyHandle类设置和修改引用对象,MyHandle类是核心,实例化后生成一系列相互持有的对象,构成一条链。
[java] view plaincopy

  1. public interface Handler {
  2. public void operator();
  3. }
    [java] view plaincopy
  4. public abstract class AbstractHandler {
  5. private Handler handler;
  6. public Handler getHandler() {
  7. return handler;
  8. }
  9. public void setHandler(Handler handler) {
  10. this.handler = handler;
  11. }
  12. }
    [java] view plaincopy
  13. public class MyHandler extends AbstractHandler implements Handler {
  14. private String name;
  15. public MyHandler(String name) {
  16. this.name = name;
  17. }
  18. @Override
  19. public void operator() {
  20. System.out.println(name+"deal!");
  21. if(getHandler()!=null){
  22. getHandler().operator();
  23. }
  24. }
  25. }
    [java] view plaincopy
  26. public class Test {
  27. public static void main(String[] args) {
  28. MyHandler h1 = new MyHandler("h1");
  29. MyHandler h2 = new MyHandler("h2");
  30. MyHandler h3 = new MyHandler("h3");
  31. h1.setHandler(h2);
  32. h2.setHandler(h3);
  33. h1.operator();
  34. }
  35. }
    输出:

h1deal!
h2deal!
h3deal!
此处强调一点就是,链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个,需要我们自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象。

时间: 2024-10-12 21:48:45

设计模式——17、责任链模式(Chain of Responsibility)的相关文章

乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)

原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) 作者:webabcd 介绍 为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它. 示例 有一个Message实体类,某个类对它的操作有Insert()方法.现在要求根据插

设计模式:责任链模式(Chain of Responsibility)

 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止. 责任链模式的角色: 1. 抽象处理者角色(Handler):定义出一个处理请求的接口.如果需要,接口可以定义出一个方法以设定和返回对下家的引用.这个角色通常由一个Java抽象类或者Java接口实现.上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handlerRequest()规范了子类处理请求的操作. 2. 具体处理者角色(Co

设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述        你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,并且沿着这条链传递请求,直到有(部门)对象处理它为止. 例子1:js的事件浮升机制 例子2: 2.问题

跟屌丝学设计模式之责任链模式

JAVA之责任链模式 原文地址:http://itzyx.com/index.php/java_zrl/ 在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的:  责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和

JAVA设计模式之责任链模式详解_java

在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓,击鼓

Java设计模式之责任链模式(Chain of Responsibility模式)介绍_java

Chain of Responsibility定义:Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request.也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去. 如何使用责任链模式虽然这一段是如何使用CoR,但是也是演示什么是CoR. 有一个Handler接口: 复制代码

详解java设计模式之责任链模式

从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正.开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒. 假比说,贾母.贾赦.贾政.贾宝玉和贾环是五个参加击鼓传花游戏的传花者,他们组成一个环链.击鼓者将花传给贾母,开始传花游戏.花由贾母传给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又由贾宝玉传给贾环,由贾环传回给贾母,如此往复(见下图).当鼓声停止时,手中有花的人就得执行酒令. 图1.击鼓传

PHP设计模式之责任链模式的深入解析_php技巧

责任链模式,其目的是组织一个对象链处理一个如方法调用的请求.当ConcreteHandler(具体的处理程序)不知道如何满足来自Client的请求时,或它的目的不是这个时,它会委派给链中的下一个Handler(处理程序)来处理. 这个设计模式通常和复合模式一起使用,其中有些叶子或容器对象默认委派操作给它们的父对象.另一个例子是,本地化通常是使用责任链处理的,当德语翻译适配器没有为翻译关键词找到合适的结果时,就返回到英语适配器或干脆直接显示关键词本身. 耦合减少到最低限度:Client类不知道由哪

Java设计模式之责任链模式简介_java

对于使用过宏的朋友应该知道,利用宏可以实现一个键绑定多个技能.例如如果排在前面的技能有CD,则跳过此技能,执行之后的技能.记得曾经玩DK,打怪的时候,就是用一个键,一直按就行了.在servlet里的doGet和doPost方法,我们一般都把doGet请求发动到doPost里来处理,这也是一种责任链的模式. 这里,有个宏,绑定了"冰血冷脉"和"寒冰箭"两个技能,程序实例如下所示: package responsibility; /** * DOC 技能接口,要绑定的技

学习JavaScript设计模式之责任链模式_javascript技巧

一.定义 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 二.示例 假设这么一个场景: 我们负责一个售卖手机的电商网站,经过分别缴纳500元定金和200元定金的两轮预定后,到了正式购买阶段.针对预定用户实行优惠,支付过500元定金的用户会收到100元的商城优惠券,支付过200元定金的用户会收到50元的商城优惠券,没有支付定金的用户归为普通购买,且在库存有限的情况下不一定保证买到. /*