文档章节

行为型模式之六:责任链模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:41
字数 359
阅读 47
收藏 0

阿里云携手百名商业领袖、技术大咖,带您一探行进中的数字新基建!>>>

责任链的主要意图是创建一个处理单元链,当每个单元满足阀值后都处理请求。当链建立之后,如果一个单元没有满足,就会尝试下一个单元,依次下去,每个请求都会单独通过链。

责任链类图

责任链的Java代码

package designpatterns.cor;
 
abstract class Chain {
  public static int One = 1;
  public static int Two = 2;
  public static int Three = 3;
  protected int Threshold;
 
  protected Chain next;
 
  public void setNext(Chain chain) {
    next = chain;
  }
 
  public void message(String msg, int priority) {
    //if the priority is less than Threshold it is handled
  	if (priority <= Threshold) {
      writeMessage(msg);
    }
 
    if (next != null) {
      next.message(msg, priority);
    }
  }
 
  abstract protected void writeMessage(String msg);
}
 
class A extends Chain {
  public A(int threshold) { 
    this.Threshold = threshold;
  }
 
  protected void writeMessage(String msg) {
    System.out.println("A: " + msg);
  }
}
 
 
class B extends Chain {
  public B(int threshold) { 
    this.Threshold = threshold;
  }
 
  protected void writeMessage(String msg) {
    System.out.println("B: " + msg);
  }
}
 
class C extends Chain {
  public C(int threshold) { 
    this.Threshold = threshold;
  }
 
  protected void writeMessage(String msg) {
    System.out.println("C: " + msg);
  }
}
 
 
public class ChainOfResponsibilityExample {
 
  private static Chain createChain() {
    // Build the chain of responsibility
 
  	Chain chain1 = new A(Chain.Three);
 
  	Chain chain2 = new B(Chain.Two);
  	chain1.setNext(chain2);
 
    Chain chain3 = new C(Chain.One);    
    chain2.setNext(chain3);
 
    return chain1;
  }
 
  public static void main(String[] args) {
 
  	Chain chain = createChain();
 
    chain.message("level 3", Chain.Three);
 
    chain.message("level 2", Chain.Two);
 
    chain.message("level 1", Chain.One);
  }
}

输出

A: level 3
A: level 2
B: level 2
A: level 1
B: level 1
C: level 1

在这个例子中,Leve1 通过了链中所以单元。 这是wiki中例子的简化: http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern 责任链在Java JDK中使用 (PS:原文中没有下方了,但是Java中类加载器就是使用了责任链模式)

© 著作权归作者所有

奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
加载中

评论(0)

Java设计模式学习记录-责任链模式

前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式)。 责任链模式 概念介绍 ...

纪莫
2018/08/16
0
0
GoF的23种设计模式之行为型模式的特点和分类(1)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对...

osc_hlq50xpf
2019/06/05
10
0
一句话总结23种设计模式则

1. 前言 断断续续写了一段时间的设计模式,终于把经典的23种设计模式全写完了。下面对这些设计模式总结一下。 2. 设计原则 设计原则的介绍 : 设计模式的六大原则 即使我们之前没有专门看过这...

四月葡萄
2018/01/05
0
0
设计模式-Chain of Responsibility模式

[TOC] 责任链模式也叫职责链模式,是一种行为型模式。 该模式中将处理请求的对象串成一条链,当有请求发生时,请求会在链上的各个节点(处理对象)传递,直达有对象能够处理它为止,如果不能...

osc_0cqshtia
2019/09/24
4
0
初探Java设计模式2:结构型模式(代理模式,适配器模式等)

行为型模式 行为型模式关注的是各个类之间的相互作用,将职责划分清楚,使得我们的代码更加地清晰。 策略模式 策略模式太常用了,所以把它放到最前面进行介绍。它比较简单,我就不废话,直接...

osc_84itep82
2019/04/06
2
0

没有更多内容

加载失败,请刷新页面

加载更多

队列关系图

Joker上上签
35分钟前
24
0
解决LeanCloud流控问题以及配置DaoVoice

最近hexo博客的评论系统valine遇上一点问题,本篇就来记录下我的解决方法。 1 LeanCloud流控问题 如果用valine评论系统的同学最近打开valine部署的日志可能会发现诸如此类的信息。 事实上我在...

胖胖雕
53分钟前
17
0
深源恒际二代信用报告OCR产品入选百度云市场优选商城

本文作者:cloudmarket 近日,深源恒际二代信用报告OCR产品入选百度云市场优选商城,用户可通过百度云市场优选商城入口0元试用相关产品。 百度云市场优选商城是从云市场合作伙伴中精选而出,...

百度开发者中心
昨天
8
0
什么是反射,为什么有用? - What is reflection and why is it useful?

问题: What is reflection, and why is it useful? 什么是反射,为什么有用? I'm particularly interested in Java, but I assume the principles are the same in any language. 我对Jav......

javail
今天
17
0
URL 中文链接 编码错误 完美解决

直接上代码 str = "%25E4%25B8%25AD%25E6%2596%2587";console.log(str);str =decodeURIComponent(decodeURIComponent(str));console.log(str); 输出结果 %25E4%25B8%25AD%25E6%2596%25......

放只虎归个山
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部