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

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

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

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

责任链:

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

客户端发请求申请经费,

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

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

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

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

  1. public abstract class AbstractHandler {
  2.  
  3. //定义自己,给get&set方法
  4. private AbstractHandler handler;
  5.  
  6. public AbstractHandler getHandler() {
  7. return handler;
  8. }
  9.  
  10. public void setHandler(AbstractHandler handler) {
  11. this.handler = handler;
  12. }
  13.  
  14. //抽象申请经费方法
  15. public abstract void execute(int money);
  16. }

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

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

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

a) money<=200

  1. public class HandlerA extends AbstractHandler {
  2.  
  3. @Override
  4. public void execute(int money) {
  5. if(money<=200){
  6. System.out.println("A审核通过…………");
  7. }else{
  8. getHandler().execute(money);
  9. }
  10. }
  11. }

 b) money<=500

  1. public class HandlerB extends AbstractHandler {
  2. @Override
  3. public void execute(int money) {
  4. if(money<=500){
  5. System.out.println("B审核可以通过…………");
  6. }else{
  7. getHandler().execute(money);
  8. }
  9. }
  10. }

 c) money<=1000

此时为最高一级

  1. public class HandlerC extends AbstractHandler {
  2. @Override
  3. public void execute(int money) {
  4. if(money<=1000){
  5. System.out.println("C审核通过…………");
  6. }else{
  7. System.out.println("审超出预算");
  8. }
  9. }
  10. }

  

客户端

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

 输出结果为: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. python sys.modules模块

    sys.modules是一个全局字典,该字典是python启动后就加载在内存中.每当程序员导入新的模块,sys.modules都将记录这些模块.字典sys.modules对于加载模块起到了缓冲的作用. ...

  2. 通过阿里云命令行工具 aliyuncli 购买服务器

    开始想通过 aliyuncli 的 golang 源码进行编译安装(注:python 版的 aliyuncli 已不再维护),但没成功,详见 通过 golang 源码编译阿里云命令行工具 aliyun ...

  3. vim快捷键与vi

    vim与程序员 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体 ...

  4. 洛谷P2949 工作调度Work Scheduling [USACO09OPEN] 贪心

    正解:贪心+并查集(umm不用并查集也成qwq 解题报告: 水题?主要感觉想到了俩方法然后还只实现了一个,怕忘了所以想着开个新坑记录下qwq 然后先放下传送门QAQ(哦这题和supermarket,双 ...

  5. 【English】【托业】【四六级】写译高频词汇

    大家都知道,四六级翻译每次考的话题不可能原句直接重复,但是,在研究了近几年的四六级真题后,我们惊奇地发现: 写译词汇在重复考! 写译词汇在重复考! 写译词汇在重复考! 因此,小编为大家整理了四六级写译 ...

  6. jQuery Mobile的默认配置项具体解释,jQuery Mobile的中文配置api,jQuery Mobile的配置说明,配置大全

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xmt1139057136/article/details/35258199 学习jQuery Mob ...

  7. JavaScript实现字符串逆置的几种方法

    1. 一般来说js实现字符串逆置输出的一般思路是: 1.将字符串转为数组,一个字符为数组的一个元素: 2.将数组倒置: 3.再将数组元素拼接为字符串. 2. 一般用到的方法有: join():该方法用 ...

  8. c#XML转换成实体

    首选:我的XML文件如下(mysql表里导出的):几千条,就选2条做例子. <?xml version="1.0" encoding="utf-8" ?& ...

  9. Codeforces 799D Field expansion(随机算法)

    Field expansion [题目链接]Field expansion [题目类型]随机化算法 &题解: 参考自:http://www.cnblogs.com/Dragon-Light/p ...

  10. JS函数预解析(小记)

    一,预解析:寻找var  function  形参     a=undefined    fn = function fn(){ alert(); } 二,逐行解读代码:    1.表达式    2. ...