【设计模式】—— 职责链模式ChainOfResponsibility

  前言:【模式总览】——————————by xingoo

  模式意图

  避免请求的发送者,和接受者过度的耦合在一起。一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心。而请求的接受者可以自己处理它,也可以把它像链条一样向后传。

  因此,请求也就意味着有可能丢失,或者说没有确切的安全保障。

  应用场景

  1 降低耦合度

  2 增强指派职责的灵活性

  3 不保证被接受

  模式结构

  Handler 定义一个接口,实现向后传递的过程

 1 abstract class Handler{
 2     protected Handler successor;
 3
 4     public abstract void handleRequest();
 5
 6     public Handler getSuccessor() {
 7         return successor;
 8     }
 9
10     public void setSuccesor(Handler successor) {
11         this.successor = successor;
12     }
13
14 }

  ConcreteHandler 可以负责请求,也可以向后传递

 1 class ConcreteHandler extends Handler{
 2     public void handleRequest(){
 3         if(getSuccessor() != null){
 4             System.out.println("getSuccessor !");
 5             getSuccessor().handleRequest();
 6         }else{
 7             System.out.println("handle in this! request()!");
 8         }
 9     }
10 }

  全部代码

 1 package com.xingoo;
 2 abstract class Handler{
 3     protected Handler successor;
 4
 5     public abstract void handleRequest();
 6
 7     public Handler getSuccessor() {
 8         return successor;
 9     }
10
11     public void setSuccesor(Handler successor) {
12         this.successor = successor;
13     }
14
15 }
16 class ConcreteHandler extends Handler{
17     public void handleRequest(){
18         if(getSuccessor() != null){
19             System.out.println("getSuccessor !");
20             getSuccessor().handleRequest();
21         }else{
22             System.out.println("handle in this! request()!");
23         }
24     }
25 }
26 public class Client {
27     public static void main(String[] args) {
28         Handler handle1,handle2,handle3;
29         handle1 = new ConcreteHandler();
30         handle2 = new ConcreteHandler();
31         handle3 = new ConcreteHandler();
32         handle1.setSuccesor(handle2);
33         handle2.setSuccesor(handle3);
34         handle1.handleRequest();
35     }
36 }

  运行结果

getSuccessor !
getSuccessor !
handle in this! request()!
时间: 2024-12-16 11:42:23

【设计模式】—— 职责链模式ChainOfResponsibility的相关文章

17. 星际争霸之php设计模式--职责链模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248202.html============================================

设计模式——职责链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. *在一个纯的职责链模式里面,一个请求必须被某一个处理者对象所接收:在一个不纯的职责链模式里面,一个请求可以最终不被任何接收端对象所接收. 适用性 在以下条件下使用Responsibility 链: 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可动态指定一组对象处理

小菜学设计模式——职责链模式

背景 时间过得真快,转眼又是半年,可是作为一名将要资深的码农,是不是应该加薪了呢?可是说到加薪,经理又要推诿,这个不是我能决定的,你去找总监吧,总监又会说,在等等吧,等这个项目上线不会亏待你的.我的个神呀,这个产品上线估计要到明年春天吧!好吧,关于职责问题,这里就是一个著名的设计模式,职责链模式. 1.使用意图 把用户的请求,层层传递处理,直到这个请求被处理为止. 2.生活实例 工作加薪.请假. 3.Java 例子(框架.JDK .JEE) 暂时没有发现,如果有发现的同学可以提出修改. 4.模式

深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)

模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者和请求的处理者解耦.这就是职责链模式的模式动机. 模式定义职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个

与状态模式相似的设计模式---职责链模式

今天我们要讨论的设计模式与前面提到的状态模式非常相似,他们不能的地方:状态模式是每个具体的状态处理自己状态的事务,若非自己状态处理的数据则将状态移动到一下一个具体状态类处理:而职责链则是根据自己的职责完成本职工作,若不能完成则判断是否已经关联了下一个环节职责,若存在则调用下一环节的处理.他们两个一个是在具体类中已经设定了下一环节,而另外一个则是在客户端先设定好职责链. 什么是职责链模式?使多个对象(职责对象)都有机会处理请求,从而避免了请求发送者与接收者之间的耦合性.将这职责对象连成一条链,使得

PHP设计模式——职责链模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 职责链模式(又叫责任链模式)包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的方法. UML类图: 角色: 抽象处理者(Manager):定义出一个处理请求的接口.如果需要,接口可以定义出一个方法,以设定和返回对下家的引用.这个角色通常由一个抽象类或接口实现. 具体处理者(CommonManager):具体处理者接到请求后,可以

设计模式-职责链模式

1.定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到对象处理它为止.    相信大家都写过if...else或者switch,当条件很多时需要写上数十行代码.如果要修改某些条件或者处理过程,就又要不断地修改这个牛叉的分支语句.这时我们可以采用职责链模式,它是将许多请求的分支或者步骤都独立出来.然后每个独立出来的部分,如果你是最终的处理那么就直接处理并结束,如果不是,那么就连接下一个处理步骤.这样就形成一个处理请求的链

大话设计模式-职责链模式

需求 实现一个公司里请假加薪等流程审批的程序. 实现 级别1 public class Request { private String requestType; private int number; public String getRequestType() { return requestType; } public void setRequestType(String requestType) { this.requestType=requestType; } public int g

JAVA 设计模式 职责链模式

用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 职责链模式是一种行为型模式. 结构 图-职责链模式 Handler : 定义一个处理请求的接口.(可选的)实现设置后继者的方法. abstract class Handler {    protected Handler successor;    public void SetSu

javascript设计模式——职责链模式

前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一系列可能会处理请求的对象被连接成一条链,请求在这些对象之间依次传递,直到遇到一个可以处理它的对象,把这些对象称为链中的节点.本文将详细介绍职责链模式 电商订单 职责链模式的例子在现实中并不难找到,以下就是两个常见的跟职责链模式有关的场景 如果早高峰能顺利挤上公交车的话,那么估计这一天都会过得很开心.