设计模式-责任链模式

设计模式-责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着对象链传递,直到有一个对象能够处理它为止。这种模式避免了请求的发送者和接收者之间的紧耦合关系,使得新增或修改处理请求的类更容易,同时提供了更好的灵活性和可扩展性。

代码结构图:

代码示例:

java 复制代码
/**
 * 处理器接口
 */
public abstract class Handler {
    protected Handler successor;

    /**
     * 设置继承者
     */
    public void setSuccessor(Handler successor){
        this.successor = successor;
    }

    public abstract void handleRequest(int request);
}	
java 复制代码
/**
 * 具体处理类
 * 处理请求数0~10之间的数
 */
public class ConcreteHandler1 extends Handler{
    @Override
    public void handleRequest(int request) {
        if (request >= 0 && request <= 10){
            System.out.println("具体实现1类 处理请求" + request);
        }else{
            // 转给下一位处理
            successor.handleRequest(request);
        }
    }
}
java 复制代码
/**
 * 具体处理类
 * 处理10~20之间的数
 */
public class ConcreteHandler2 extends Handler{

    @Override
    public void handleRequest(int request) {
        if (request >= 10 && request <= 20){
            System.out.println("具体实现2类 处理请求" + request);
        }else{
            // 转给下一位处理
            System.out.println("当前数值未能满足所有处理条件 处理请求" + request);
        }
    }
}
java 复制代码
/**
 * 责任链模式客户端
 */
public class ResponsibilityDemo {
    public static void main(String[] args) {
        // 设置责任链
        ConcreteHandler1 concreteHandler1 = new ConcreteHandler1();
        ConcreteHandler2 concreteHandler2 = new ConcreteHandler2();
        concreteHandler1.setSuccessor(concreteHandler2);


        // 定义数组 循环模拟测试
        int [] requests = {2, 14, 22, 2, 44};
        for (int i = 0; i < requests.length; i++) {
            concreteHandler1.handleRequest(requests[i]);
        }
    }
}

打印结果:

java 复制代码
Connected to the target VM, address: '127.0.0.1:19554', transport: 'socket'
具体实现1类 处理请求2
具体实现2类 处理请求14
当前数值未能满足所有处理条件 处理请求22
具体实现1类 处理请求2
当前数值未能满足所有处理条件 处理请求44
Disconnected from the target VM, address: '127.0.0.1:19554', transport: 'socket'
相关推荐
七月丶3 小时前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞3 小时前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式
九狼4 小时前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式
SimonKing4 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean4 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven975 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55115 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河15 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程18 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读