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

news/2024/7/7 3:21:01 标签: 责任链模式, java, 开发语言

引言

责任链模式(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. 审批流程

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

java">// 定义处理者接口
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 {
    @Override
    public 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 {
    @Override
    public 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 {
    @Override
    public 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. 风险控制

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

java">// 定义处理者接口
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 {
    @Override
    public 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 {
    @Override
    public 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 {
    @Override
    public 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中,责任链模式被广泛应用于过滤器链的实现。多个过滤器组成一条责任链,依次处理安全请求。

java">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是一个实现责任链模式的通用框架,提供了灵活的请求处理机制。

java">public class MyCommand implements Command {
    @Override
    public 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.niftyadmin.cn/n/5534932.html

相关文章

[ruby on rails]rails6.0升级6.1

1.准备工作 在开始升级过程之前&#xff0c;我们有一些建议的准备工作。 升级的时候&#xff0c;最好一个版本一个版本升级&#xff0c;比如6.0到6.1再到7.0&#xff0c;不要一次从6.0到7.0至少80%的测试覆盖率&#xff0c;测试真的很重要&#xff0c;能确保升级快速完成。本…

论文解读StyleGAN系列——StyleGANv1

论文&#xff1a;A Style-Based Generator Architecture for Generative Adversarial Networks&#xff08;2018.12&#xff09; 作者&#xff1a;Tero Karras, Samuli Laine, Timo Aila 链接&#xff1a;https://arxiv.org/abs/1812.04948 代码&#xff1a;https://github.com…

【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?

文章目录 卡顿一、可重现的卡顿二、不可重现的卡顿第一种方案: 基于 Looper 的监控方法第二种方案:基于 Choreographer 的监控方法第三种方案:字节码插桩方式第四种方案: 使用 JVMTI 监听函数进入与退出总结相关大厂的方案ArgusAPMBlockCanaryQQ空间卡慢组件Matrix微信广研参…

day02-统计数据

numpy统计学 1.求平均值[数组名.mean()/np.mean(数组名)] m1 np.arange(20).reshape((4,5))m1.mean() #9.5若想要求某一维的平均值&#xff0c;设置axis参数&#xff0c;多维数组元素指定&#xff1a; axis 0&#xff0c;将从上往下计算。axis 1&#xff0c;将从左往右计算…

mmdetection3增加12种注意力机制

在mmdetection/mmdet/models/layers/目录下增加attention_layers.py import torch.nn as nn from mmdet.registry import MODELS #自定义注意力机制算法 from .attention.CBAM import CBAMBlock as _CBAMBlock from .attention.BAM import BAMBlock as _BAMBlock from .attent…

自然语言处理学习--3

对自然语言处理领域相关文献进行梳理和总结&#xff0c;对学习的文献进行梳理和学习记录。希望和感兴趣的小伙伴们一起学习。欢迎大家在评论区进行学习交流&#xff01; 论文&#xff1a;《ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information》 下面…

Android 使用adb操作WiFi连接扫描等相关指令

Android 使用adb操作WiFi连接扫描等相关指令 文章目录 Android 使用adb操作WiFi连接扫描等相关指令一、前言二、adb shell cmd wifi 主要命令### 1、adb shell cmd wifi -h2、打开关闭WLAN3、扫描WiFi 和查看扫描列表4、连接WiFi5、查看WiFi状态(1) wifi 正常连接下的信息&…

在Ubuntu 22.04 LTS 上安装 MySQL两种方式:在线方式和离线方式

Ubuntu安装MySQL 介绍&#xff1a; Ubuntu 是一款基于Linux操作系统的免费开源发行版&#xff0c;广受欢迎。它以稳定性、安全性和用户友好性而闻名&#xff0c;适用于桌面和服务器环境。Ubuntu提供了大量的软件包和应用程序&#xff0c;拥有庞大的社区支持和活跃的开发者社区…