设计模式-责任链模式

设计模式-责任链模式

责任链模式(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'
相关推荐
xiaohaiAIgeo5 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
小强库计算机毕业设计5 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质5 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军5 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
编程令我快乐5 小时前
maven部分构建参数讲解
java·maven
ZC跨境爬虫5 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
workflower5 小时前
例二:某汽车制造企业深度融合AI智能体,构建园区网络的智能运维体系
人工智能·机器学习·设计模式·机器人·云计算·汽车·制造
kisbad6 小时前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript
憧憬成为java架构高手的小白6 小时前
langchain4j框架学习
java
0x536 小时前
Java网络编程(四)
java·网络