责任链模式在金融业务中的应用及其框架实现

引言

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它通过为请求创建一个处理链,使多个对象都有机会处理这个请求。责任链模式通过将请求的发送者和接收者解耦,使得多个接收者可以依次处理请求,直到有一个接收者处理它为止。在金融业务中,责任链模式被广泛应用于审批流程、风险控制、交易处理等场景。本文将介绍责任链模式在金融业务中的使用,并探讨哪些框架中应用了责任链模式及其实现方式。

设计原理

责任链模式主要涉及以下几个角色:

  1. 处理者(Handler):定义一个处理请求的接口,并实现后续链的引用。
  2. 具体处理者(Concrete Handler):实现处理者接口,处理它所负责的请求。如果不能处理,则将请求转发给下一个处理者。
  3. 客户端(Client):创建具体处理者,并将它们组装成一条责任链。

类图

下图展示了责任链模式的类图:

nextHandler
Handler
+setNext(handler: Handler)
+handleRequest(request: Request)
ConcreteHandlerA
+handleRequest(request: Request)
ConcreteHandlerB
+handleRequest(request: Request)
ConcreteHandlerC
+handleRequest(request: Request)

责任链模式在金融业务中的应用

1. 审批流程

在金融业务中,审批流程通常需要经过多个级别的审批。可以使用责任链模式实现这种多级审批的处理逻辑。

// 定义处理者接口
public abstract class Approver {protected Approver nextApprover;public void setNextApprover(Approver nextApprover) {this.nextApprover = nextApprover;}public abstract void approveRequest(int amount);
}// 具体处理者:经理
public class Manager extends Approver {@Overridepublic void approveRequest(int amount) {if (amount <= 10000) {System.out.println("Manager approved the request of $" + amount);} else if (nextApprover != null) {nextApprover.approveRequest(amount);}}
}// 具体处理者:总监
public class Director extends Approver {@Overridepublic void approveRequest(int amount) {if (amount <= 50000) {System.out.println("Director approved the request of $" + amount);} else if (nextApprover != null) {nextApprover.approveRequest(amount);}}
}// 具体处理者:总经理
public class President extends Approver {@Overridepublic void approveRequest(int amount) {if (amount <= 100000) {System.out.println("President approved the request of $" + amount);} else {System.out.println("Request of $" + amount + " requires a board meeting!");}}
}// 客户端代码
public class ChainOfResponsibilityDemo {public static void main(String[] args) {Manager manager = new Manager();Director director = new Director();President president = new President();manager.setNextApprover(director);director.setNextApprover(president);// 测试审批流程manager.approveRequest(5000);manager.approveRequest(20000);manager.approveRequest(75000);manager.approveRequest(150000);}
}
2. 风险控制

在金融交易中,风险控制流程需要经过多个级别的检查。可以使用责任链模式实现这种多级风险检查的处理逻辑。

// 定义处理者接口
public abstract class RiskHandler {protected RiskHandler nextHandler;public void setNextHandler(RiskHandler nextHandler) {this.nextHandler = nextHandler;}public abstract void handleRisk(String risk);
}// 具体处理者:初级风险检查
public class BasicRiskHandler extends RiskHandler {@Overridepublic void handleRisk(String risk) {if (risk.equals("Low")) {System.out.println("BasicRiskHandler handled the risk: " + risk);} else if (nextHandler != null) {nextHandler.handleRisk(risk);}}
}// 具体处理者:中级风险检查
public class IntermediateRiskHandler extends RiskHandler {@Overridepublic void handleRisk(String risk) {if (risk.equals("Medium")) {System.out.println("IntermediateRiskHandler handled the risk: " + risk);} else if (nextHandler != null) {nextHandler.handleRisk(risk);}}
}// 具体处理者:高级风险检查
public class AdvancedRiskHandler extends RiskHandler {@Overridepublic void handleRisk(String risk) {if (risk.equals("High")) {System.out.println("AdvancedRiskHandler handled the risk: " + risk);} else {System.out.println("Risk level " + risk + " is beyond our handling capabilities.");}}
}// 客户端代码
public class RiskControlDemo {public static void main(String[] args) {BasicRiskHandler basicRiskHandler = new BasicRiskHandler();IntermediateRiskHandler intermediateRiskHandler = new IntermediateRiskHandler();AdvancedRiskHandler advancedRiskHandler = new AdvancedRiskHandler();basicRiskHandler.setNextHandler(intermediateRiskHandler);intermediateRiskHandler.setNextHandler(advancedRiskHandler);// 测试风险控制流程basicRiskHandler.handleRisk("Low");basicRiskHandler.handleRisk("Medium");basicRiskHandler.handleRisk("High");basicRiskHandler.handleRisk("Critical");}
}

责任链模式在框架中的应用

1. Spring Security

在Spring Security中,责任链模式被广泛应用于过滤器链的实现。多个过滤器组成一条责任链,依次处理安全请求。

public class SecurityFilterChain {private List<SecurityFilter> filters;public SecurityFilterChain(List<SecurityFilter> filters) {this.filters = filters;}public void doFilter(SecurityRequest request, SecurityResponse response) {for (SecurityFilter filter : filters) {if (!filter.doFilter(request, response)) {break;}}}
}
2. Apache Commons Chain

Apache Commons Chain是一个实现责任链模式的通用框架,提供了灵活的请求处理机制。

public class MyCommand implements Command {@Overridepublic boolean execute(Context context) {// 处理请求return false; // 返回true表示处理完毕,责任链终止}
}// 创建责任链
Chain chain = new ChainBase();
chain.addCommand(new MyCommand());
// 执行责任链
chain.execute(context);

总结

责任链模式在金融业务中具有广泛的应用,可以灵活地实现多级审批流程、风险控制等功能。在框架中,责任链模式也被广泛应用于实现过滤器链、请求处理链等机制,使得系统更具灵活性和可扩展性。

参考文献

  • Refactoring Guru - Chain of Responsibility Pattern
  • Spring Security Documentation
  • Apache Commons Chain Documentation

互动与反馈

如果你觉得这篇文章对你有帮助,请点赞、收藏并关注我,以便获得更多优质内容!如有疑问或建议,欢迎在评论区留言,我会及时回复。感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——命令执行原理,命令别名

### 执行原理 - 系统为了让用户在命令行快速方便地执行命令&#xff0c;将可执行文件的路径存储在环境变量PATH中&#xff0c;使得shell知道命令的可执行文件位置 - PATH环境变量&#xff1a;当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件…

景区智慧公厕解决方案,公厕革命新方式

在智慧旅游的浪潮下&#xff0c;景区智慧公厕解决方案正悄然引领着一场公厕革命&#xff0c;不仅革新了传统公厕的管理模式&#xff0c;更以智能化、人性化的服务理念&#xff0c;为游客提供了前所未有的舒适体验。作为智慧城市建设的重要一环&#xff0c;智慧公厕解决方案正逐…

计算机网络之以太网

上文内容&#xff1a;总线局域网以及冲突的解决方法 1.以太网的起源 1.1起源 60年代末期&#xff0c;夏威夷大学Norman Abramson等研制ALOHA无线网络系统,实现Oahu岛上的主机和其它岛及船上的读卡机和终端通信&#xff1b; 出境信道地址&#xff1a;主机到终端&#xff1…

如何利用好用便签提高工作效率?

在忙碌的工作中&#xff0c;我们经常需要记住许多琐碎的任务。如果这些任务被遗忘&#xff0c;可能会对我们的工作产生影响。这时&#xff0c;便签就成为了我们的得力助手。通过合理的使用和管理&#xff0c;便签不仅能帮助我们记住重要的事项&#xff0c;还能提高我们的工作效…

RPM方式安装mysql

下载离线版本mysql。 mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar 解压 26468960 Dec 11 2020 mysql-community-client-5.7.33-1.el7.x86_64.rpm315280 Dec 11 2020 mysql-community-common-5.7.33-1.el7.x86_64.rpm3918736 Dec 11 2020 mysql-community-devel-5.7.33-1.el…

Redis基础教程(十四):Redis连接

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

通过装饰器将有BUG的pytorch算子放置在CPU上,而不用修改模型代码

通过装饰器将有BUG的pytorch算子放置在CPU上,而不用修改模型代码 1.代码 某些pytorch算子发下到设备后会导致设备异常,为了暂时规避,先放在CPU上执行 修改模型源码很不友好,可以采用以下方法 1.代码 def force_cpu(func):def wrapper(self, *args, **kwargs):self_cpu self.…

在Windows可以如此丝滑的测试ios应用

在没有Mac本的时候,又想测试iphone或者ipad该怎么办? 最简单的办法当然是买一个了,如果经济上觉得不划算的话,不妨看看这篇文章,或许能帮到您,有任何问题欢迎一起交流。 原理图 开发环境 操作系统:Windows11 被测设备: iPad mini 15.5 注意事项 一定要安装iTunes!一…

NET程序开发可能会用到的一些资料文档

NET程序开发使用的一些资料文件&#xff0c;NET高级调试&#xff0c;NET关键技术深入解析&#xff0c;WPF专业编程指南&#xff0c;程序员求职攻略&#xff0c;WPF编程宝典等。 下载链接&#xff1a;https://download.csdn.net/download/qq_43307934/89518582

GPT-4o将改变论文学术文风,科学家揭示5年内百万篇论文“is”“are”词频减少10%!

在最近的一项研究中&#xff0c;意大利国际高等研究院&#xff08;SISSA&#xff09;的博士生耿明萌量化了 ChatGPT 对学术论文写作的影响。 与以往主要分析 ChatGPT 生成的段落或文章不同&#xff0c;这次研究更关注整体情况。 论文地址&#xff1a;https://arxiv.org/pdf/2…

如何在Vue中添加事件监听器

在Vue中添加事件监听器主要有两种方式&#xff1a;在模板中直接添加和使用Vue实例的方法。以下将详细解释这两种方法。 1. 在模板中直接添加 在Vue的模板中&#xff0c;你可以直接在HTML元素上使用v-on指令&#xff08;或其简写形式&#xff09;来监听DOM事件&#xff0c;并在…

SpringBoot怎么单独关闭某个类打印出来的日志?

application.yml文件增加以下内容&#xff1a; logging:level:org.springframework.amgp.rabbit: OFF 配置logging:level是配置的什么&#xff1f; 在application.yml文件中配置logging.level是用来设置日志级别的。这是Spring Boot应用中的一个常用配置&#xff0c;它允许您…

go内存返还系统相关代码

在go中内存返还系统相关代码主要由sysUnusedOS实现 在Linux中默认是通过madvice方法的_MADV_FREE进行释放&#xff0c;在这种释放中内存其实是被延迟回收的。 func sysUnusedOS(v unsafe.Pointer, n uintptr) {if uintptr(v)&(physPageSize-1) ! 0 || n&(physPageSiz…

Spring AOP实现操作日志记录示例

1. 准备工作 项目环境&#xff1a;jdk8springboot2.6.13mysql8 1.1 MySQL表 /*Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 50730Source Host : 127.0.0.1:3306Source Schema …

双扩散金属氧化物半导体(DMOS)应用广泛 超结VDMOS市场需求空间大

双扩散金属氧化物半导体&#xff08;DMOS&#xff09;应用广泛 超结VDMOS市场需求空间大 双扩散金属氧化物半导体简称DMOS&#xff0c;是MOS管的一种。MOS管全称为金属氧化物半导体场效应管&#xff0c;又称为MOSFET&#xff0c;是一种利用改变电压来控制电流的半导体器件。  …

《梦醒蝶飞:释放Excel函数与公式的力量》8.8 STDEVP函数

8.8 STDEVP函数 STDEVP函数是Excel中用于计算总体数据的标准偏差的函数。标准偏差是统计学中的一个重要指标&#xff0c;用于衡量数据集中各数值偏离平均值的程度。总体标准偏差考虑了整个数据集&#xff0c;而不是样本。 8.8.1 函数简介 STDEVP函数用于返回总体数据的标准偏…

2023年工作回顾与总结

一、工作概述 主要工作职责和任务 完善XXX平台的基础能力优化XXX平台基础架构负责平台小组代码评审负责复杂功能的提供技术支持负责复杂功能的技术方案评审负责XXX国家项目中平台相关项目通过验收 具体内容和完成情况 XX平台架构优化 &#xff08;1&#xff09;完成通用控…

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型&#xff0c;整体来说&#xff0c;Redis 是一个键值对结构的&#xff0c;…

第N7周:seq2seq翻译实战-pytorch复现-小白版

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 理论基础 seq2seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于机器翻译、文本摘要等序列转换任务的框架。它由两个主要的递归神经网络&#…

【leetcode】双指针算法题

文章目录 1.算法思想2.移动零3.复写零方法一方法二 4.快乐数5.盛水最多的容器方法一&#xff08;暴力求解&#xff09;方法二&#xff08;左右指针&#xff09; 6.有效三角形的个数方法一&#xff08;暴力求解&#xff09;方法二&#xff08;左右指针&#xff09; 7.两数之和8.…