什么是责任链模式,一般用在什么场景?

面试

责任链模式:将请求沿着处理者链进行传递,直到有一个处理者处理它为止。 使用场景:

1)前置的参数校验,将不同的校验规则拆分成不同的处理节点,依次进行校验。

2)多级流程审批,根据采购金额的大小,分配给不同级别的人员进行审批。

3)日志记录系统,将不同级别的日志记录器组织成一条链,当日志事件发生时,沿着链传递,直到找到合适的记录 器为止。

java 复制代码
// 抽象处理器
abstract class Handler {
    protected Handler next;

    public Handler setNext(Handler next) {
        this.next = next;
        return next; // 返回next方便链式调用
    }

    public abstract void handle(int amount);
}

// 组长:500以内
class LeaderHandler extends Handler {
    public void handle(int amount) {
        if (amount <= 500) {
            System.out.println("组长审批通过:" + amount);
        } else if (next != null) {
            next.handle(amount);
        }
    }
}

// 经理:500-2000
class ManagerHandler extends Handler {
    public void handle(int amount) {
        if (amount <= 2000) {
            System.out.println("经理审批通过:" + amount);
        } else if (next != null) {
            next.handle(amount);
        }
    }
}

// 使用
Handler chain = new LeaderHandler();
chain.setNext(new ManagerHandler()).setNext(new DirectorHandler());
chain.handle(1500); // 经理审批通过:1500
相关推荐
10mAh42 分钟前
【Java】HashMap 的 put 到底做了什么?——冲突、扩容与树化实测
java·开发语言·hash
我命由我123451 小时前
人脸识别 - 勒克斯(光线照射到物体表面上的明亮程度)
android·java·学习·java-ee·人脸识别·学习方法·android runtime
TechLee2 小时前
跨语言加解密总对不上?这个纯 Go 神库让 AES/RSA 与 PHP、Java 100% 互通
java·后端·算法
LINgZone22 小时前
系统架构与分支规范
java·数据库·架构
AC赳赳老秦2 小时前
企业级合规审计体系:用 OpenClaw 落地采集全链路留痕,自动生成合规审计报告
java·python·django·beautifulsoup·php·deepseek·openclaw
吃杠碰小鸡3 小时前
VsCode中开发Java项目
java·vscode
宠友信息3 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
行百里er3 小时前
加个依赖就生效?一行搞定 Spring Boot Starter 自动装配
java·后端·监控
月华路3 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法