责任链模式的关键在于每一个任务处理者都必须持有下一个任务处理者的作用

纯的责任链:纯的责任链是只能也必须只有一个任务处理者去处理这个任务,

          不会出现没有处理者处理的情况,也不会出现有多个处理者处理同一个任务

不纯的责任链:可以有多个任务处理者同时处理一个任务,那么就表示这个任务是大家一起共享的,或者也可以没有任何处理这去处理他

责任链:

这是一个简单的经费申请责任链。

客户端发请求申请经费,

申请经费从最小权限范围开始申请,如果权限不足则向上一级申请。

1:定义一个抽象类(AbstractHandler),抽象申请经费方法.

2:定义三个子类,继承 AbstractHandler 父类,实现抽象方法 execute(int money);

1:这个抽象定义自己本身,然后赋予get&set方法;

public abstract class AbstractHandler {

    //定义自己,给get&set方法
private AbstractHandler handler; public AbstractHandler getHandler() {
return handler;
} public void setHandler(AbstractHandler handler) {
this.handler = handler;
} //抽象申请经费方法
public abstract void execute(int money);
}

2:第一个子类,申请经费范围在小于或定于200内,

做出判断,如果不在范围内,从新调用execute方法,

此时的execute是下一级审批官的方法了在后面客户端main方法里面可以设置

a) money<=200

public class HandlerA extends AbstractHandler {

    @Override
public void execute(int money) {
if(money<=200){
System.out.println("A审核通过…………");
}else{
getHandler().execute(money);
}
}
}

 b) money<=500

public class HandlerB extends AbstractHandler {
@Override
public void execute(int money) {
if(money<=500){
System.out.println("B审核可以通过…………");
}else{
getHandler().execute(money);
}
}
}

 c) money<=1000

此时为最高一级

public class HandlerC extends AbstractHandler {
@Override
public void execute(int money) {
if(money<=1000){
System.out.println("C审核通过…………");
}else{
System.out.println("审超出预算");
}
}
}

  

客户端

public class Main {
public static void main(String[] args) {
     //实现三个不同级别权限的子类
AbstractHandler A = new HandlerA();
AbstractHandler B = new HandlerB();
AbstractHandler C = new HandlerC();
     //给子类赋予下一个对应的级别
A.setHandler(B);
B.setHandler(C);
A.execute(300);
}
}

 输出结果为:A审核通过…………

后记:虽然发现很容易就完成了责任链,但是发现代码并不如意,耦合太高,后续一篇会对此进行优化

JAVA中的责任链模式(CH01)的更多相关文章

  1. JAVA中的责任链模式(CH02)

    对责任链CH01做出优化,解决耦合度太高问题 记得上一篇我们使用的是抽象类,然后用子类去继承的方法实现等级的桥接,从而发现了耦合度太高. 为了解决这个问题. 我们本次使用接口进行抽象,然后使用到一个” ...

  2. Python使用设计模式中的责任链模式与迭代器模式的示例

    Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...

  3. 如何在C#/.NET Core中使用责任链模式

    原文:Chain Of Responsbility Pattern In C#/.NET Core 作者:Wade 译者:Lamond Lu 最近我有一个朋友在研究经典的"Gang Of F ...

  4. java设计模式之责任链模式以及在java中作用

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

  5. JAVA设计模式之责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

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

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...

  7. Java设计模式应用——责任链模式

    生产一个产品,需要依次执行多个步骤,才能完成,那么是使用责任链模式则是极好的. 在性能告警模块开发过程中,创建一条告警规则需要执行阈值解析,中间表生成,流任务生成,规则入库,告警事件入库等诸多操作.如 ...

  8. java设计模式之责任链模式(Chain of Responsibility)

    转自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样 ...

  9. Java设计模式之责任链模式、职责链模式

    本文继续介绍23种设计模式系列之职责链模式.   什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组.   职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...

随机推荐

  1. js获取谷歌浏览器版本 和 js分辨不同浏览器

    // 获取谷歌版本 function getChromeVersion() { var arr = navigator.userAgent.split(' '); var chromeVersion ...

  2. python全栈开发 * 进程池,线程理论 ,threading模块 * 180727

    一.进程池 (同步 异步 返回值) 缺点: 开启进程慢 几个CPU就能同时运行几个程序 进程的个数不是无线开启的 应用: 100个任务 进程池 如果必须用多个进程 且是高计算型 没有IO型的程序 希望 ...

  3. Gym 101194D / UVALive 7900 - Ice Cream Tower - [二分+贪心][2016 EC-Final Problem D]

    题目链接: http://codeforces.com/gym/101194/attachments https://icpcarchive.ecs.baylor.edu/index.php?opti ...

  4. python入门以及接口自动化实践

    一.Python入门必备基础语法# 标识符:python中我们自己命名的都是标识符# 项目名 包名 模块名# 变量名 函数名 类名# 1:字母 下划线 数字组成 命名的时候不能以数字开头# 2:见名知 ...

  5. Spring Boot 自动配置原理(精髓)

    一.自动配置原理(掌握) SpringBoot启动项目会加载主配置类@SpringBootApplication,开启@EnableAutoConfiguration自动配置功能 @EnableAut ...

  6. vue-property-decorator 提供 OO 的风格 Vue Component 方便类型声明

    @Prop  父子组件之间传值 Install: npm install --save vue-property-decorator Child: <template> <div&g ...

  7. java框架之SpringMVC(2)-补充及拦截器

    高级参数绑定 package com.zze.springmvc.web.controller; import org.springframework.stereotype.Controller; i ...

  8. python自动类型转换(针对于Number数据类型来的)精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转化

    # ### 自动类型转换(针对于Number数据类型来的) ''' 精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转 ...

  9. android 前台服务不显示通知

    原因可以在哪里写了执行完成后就自动结束的吧 导致前台服务没有出现 如我 @Override public int onStartCommand(Intent intent, int flags, in ...

  10. 手把手教你安装mac版hadoop2.7.3教程

    一.准备教程 1.jdk:版本在1.7.x以上就可以(因为hadoop2.x以上只支持1.7.x以上的jdk,我的是1.8的) 2.Hadoop:2.7.3 二.ssh的配置以及验证 配置ssh: 1 ...