责任链模式简单介绍

简介: 责任链模式简单介绍
  • 通过名字中有链可以了解到这个是个链表,只不过这个链表加了自身的逻辑处理。责任链中数据的处理是根据当前的逻辑判断和后继逻辑的判断组成的。


网络异常,图片无法展示
|


责任链的一些的一些特点


  • 链上的每个节点都有执行的可能,都可能终结数据流转。
  • 每个业务节点都有独立的业务逻辑处理,对于节点的处理逻辑是解耦的。
  • 可以作为数据的过滤,也可以作为数据的传递处理。


结构


  • 抽象的处理类 定义一个抽象处理方法,和后继的处理类
  • 实际的处理类,实现当前的处理逻辑
  • 传递处理的对象
  • 客户类组装处理类,不必关系处理的实现逻辑


一个简单的处理流程过滤例子


  • 首先声明一个数据传递类


public class ReimburseMoney {
  private BigDecimal money;
  private String msg;
}
复制代码


  • 声明一个抽象的处理类

处理类这里定义一个抽象方法,可用于实现自身的业务逻辑

定义了一个自动执行下一个链的方法,判断逻辑为是否通过下一个执行;再实现抽象方法的时候如果不想再被下一个链处理了可以设置下个链为null。


public abstract class Handler {
  private Handler next;
        //业务处理
  public abstract boolean approval(ReimburseMoney re);
        //处理方法
        public boolean approvalHandler(ReimburseMoney re) {
    boolean result=this.approval(re);
    if(result && null!=next) {
      re.setMsg("下级审批中...");
      System.out.println(re.toString());
      return next.approvalHandler(re);
    }else {
      return result;
    }
  }
}
复制代码


  • 实际的处理类


public class GroupLeaderHandler extends Handler {
  @Override
  public boolean approval(ReimburseMoney re) {
    if(re.getMoney().compareTo(new BigDecimal(10))<=0) {
      re.setMsg("L1小额无需审批");
      System.out.println(re.toString());
                        this.setNext(null);//无需下级审批
      return true;
    }else if(re.getMoney().compareTo(new BigDecimal(10000))<=0){
      re.setMsg("L1审批通过");
      System.out.println(re.toString());
      return true;
    }else {
      re.setMsg("L1审批失败");
      return false;
    }
  }
}
复制代码


客户端组装类,效果


网络异常,图片无法展示
|


用到的地方


  • Servlet开发中,过滤器(Filter 一般做登录判断)是链式处理
  • Java中,异常捕获也是一种责任链模式
  • 过滤数据根据不同维度组合进行数据过滤,相当于筛选条件
目录
打赏
0
0
0
0
2
分享
相关文章
GPU实例使用--单实例上运行Linux桌面多开解决方案
客户前期使用的旧异构实例面临更新换代,新的推荐异构实例性能更强,客户的业务软件运行时,GPU使用率不高,需要探索多开方案,提高GPU使用率,提高实例性价比。
实测阿里云操作系统控制台:功能、诊断与优化
阿里云操作系统(AliOS)是阿里巴巴专为物联网和智能设备开发的操作系统,提供高效、安全、智能化的解决方案。本文介绍了如何开通和使用阿里云的云服务器ECS,包括注册、选择操作系统、创建用户及授权等步骤。通过控制台,用户可以实时监控设备状态、管理组件、进行性能诊断,并优化资源使用。掌握这些功能有助于提升系统管理和数据处理能力,满足物联网场景的多样化需求。建议进一步丰富系统健康指标和观测功能,以提供更好的用户体验。
265 24
容器服务 kubernetes(ACK)中应用优雅上下线
容器服务 kubernetes(ACK)中应用优雅上下线
7505 0
淘宝商品数据采集API技术分享
在电商领域,数据采集和分析对提升业务效率、优化用户体验至关重要。淘宝作为国内最大电商平台之一,提供了丰富的商品数据。通过淘宝商品采集API,开发者可高效获取这些数据,支持决策。本文详细介绍了如何注册、申请权限、构建请求、处理响应及注意事项,助力商家和开发者利用API进行商品数据采集。
官宣开源|阿里云与清华大学共建AI大模型推理项目Mooncake
2024年6月,国内优质大模型应用月之暗面Kimi与清华大学MADSys实验室(Machine Learning, AI, Big Data Systems Lab)联合发布了以 KVCache 为中心的大模型推理架构 Mooncake。
共享库soname机制
【7月更文挑战第4天】Linux共享库的soname机制管理版本,通过libname.so.x的形式区分主版本。soname(如libname.so.x)在程序编译时被记录,运行时动态链接器依据soname找对应的.so.x文件。linkname(libname.so)用于编译时链接。更新库时,soname不变则不影响已编译程序,新soname则需新旧版本共存。`ldconfig`用于更新系统共享库缓存。
153 3
【Vue 3】如何实现动态表单生成器的拖拽功能?
【Vue 3】如何实现动态表单生成器的拖拽功能?
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问