文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:41
字数 359
阅读 12
收藏 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中类加载器就是使用了责任链模式)

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
Java设计模式学习记录-责任链模式

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

纪莫
08/16
0
0
一句话总结23种设计模式则

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

四月葡萄
01/05
0
0
实时Android语音对讲系统架构

本文属于Android局域网内的语音对讲项目系列,《通过UDP广播实现Android局域网Peer Discovering》实现了局域网内的广播及多播通信,本文将重点说明系统架构,音频信号的实时录制、播放及编解...

yhthu
2017/04/25
0
0
设计模式--总结

学习设计模式的好处: 学习设计模式最好的方式: 设计模式的本质目的: OO是原则,设计模式是具体方法和工具。 设计模式分类: 创建型模式(五种): 工厂方法模式、抽象工厂模式、单例模式、建造...

有钱有爱
2016/04/09
115
0
设计模式学习笔记(10)职责链

本文实例代码:https://github.com/JamesZBL/javadesign_patterns 职责链(Chain of Responsibility 亦译作 “责任链”)模式中,行为型模式的一种。它的具体特征是,几乎每个行为的实现者都...

摆码王子
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

注解

今日学习目标 : 能够使用Junit进行单元测试 能够说出注解的作用 能够使用JDK提供的3个注解 能够根据基本语法编写自定义注解实现类 能够了解自定义注解解析 能够了解元注解使用 能够根据上课案...

码农屌丝
10分钟前
1
0
configure: error: xml2-config not found. Please check your libxml2 installation

安装php时的报错 checking libxml2 install dir... no checking for xml2-config path... configure: error: xml2-config not found. Please check your libxml2 installation. 检查是否安装......

bengozhong
13分钟前
0
0
Java8 new Time Api

Java8 new Time Api JAVA8之前Date/Times Api的问题 线程安全问题 Api 不易理解 Api 转换复杂 1. Main class LocalDate LocalTime LocalDateTime ZonedDateTime Period Duration LocalDate ......

Kenny100120
14分钟前
0
0
403. Frog Jump

Description Tag:Dynamic Programming Difficulty:Hard A frog is crossing a river. The river is divided into x units and at each unit there may or may not exist a stone. The fro......

52iSilence7
16分钟前
0
0
nginx+php+swoole安装记录

领了台阿里服务器1vCPU 1G,做下测试研究。 系统 centos7,使用yum安装。 Nginx yum install nginx##开启nginxservice nginx start 安装php72 安装前确定下系统是否有安装php,有请卸载:...

WalkingSun
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部