文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:41
字数 359
阅读 12
收藏 0
点赞 0
评论 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
昌平
程序员
一句话总结23种设计模式则

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

四月葡萄 ⋅ 01/05 ⋅ 0

实时Android语音对讲系统架构

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

yhthu ⋅ 2017/04/25 ⋅ 0

设计模式学习笔记(10)职责链

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

摆码王子 ⋅ 05/21 ⋅ 0

设计模式--总结

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

有钱有爱 ⋅ 2016/04/09 ⋅ 0

PHP的23种设计模式--php_design_patterns

学习理解设计模式,记录PHP关于23种设计模式的简单Demo。 设计模式分为:创建型模式, 结构型模式,行为型模式等23种设计模式。 一、五种创建型模式如下: 工厂方法模式factorymethod 抽象工...

匿名 ⋅ 2016/04/13 ⋅ 1

Java设计模式百例 - 责任链模式

> 本文源码见:https://github.com/get-set/get-designpatterns/tree/master/chainofresponsibility 责任链模式(Chain of Responsibility Pattern)中,通常每个接收者都包含对另一个接收者......

享学IT ⋅ 2017/12/12 ⋅ 0

剑指Offer——知识点储备-设计模式

剑指Offer——知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化); (2)里氏替换(任何父类出现的地方子类都可以替换); (3)依赖倒置...

sunhuaqiang1 ⋅ 2016/11/07 ⋅ 0

23种设计模式总结(三)

前面2节,我们主要介绍了构建型和结构型的设计模式,今天我们重点讲一下行为型。 策略模式 要点:一个策略的接口,若干个实现类,针对不同的情况,选择不同的策略实现来解决问题。 典型场景:...

大胖和二胖 ⋅ 2016/11/29 ⋅ 0

责任链模式实现费用报销的审核

责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户...

tsmyk0715 ⋅ 2016/07/20 ⋅ 0

JAVA设计模式之责任链模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起...

jiangmitiao ⋅ 2016/03/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 23分钟前 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 50分钟前 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 57分钟前 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部