设计模式-责任链模式

设计模式-责任链模式

责任链模式(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'
相关推荐
早起鸟儿12 分钟前
docker-Dockerfile 配置
java·linux·运维·docker
云边小网安17 分钟前
java集合篇(六) ---- ListIterator 接口
java·开发语言·青少年编程·java集合
都叫我大帅哥23 分钟前
Spring WebFlux:响应式编程的“未来战士”还是“花架子”?
java·spring·flux
都叫我大帅哥25 分钟前
Reactor 深度解析:响应式编程的「核反应堆」是如何工作的?
java·spring
不太厉害的程序员25 分钟前
NC65配置xml找不到Bean
xml·java·后端·eclipse
我在北国不背锅1 小时前
基于Java开发的浏览器自动化Playwright-MCP服务器
java·playwright·mcp
LUCIAZZZ1 小时前
钉钉机器人-自定义卡片推送快速入门
java·jvm·spring boot·机器人·钉钉·springboot
优秀1352 小时前
java33
java
fajianchen3 小时前
Spring中观察者模式的应用
java·开发语言
库库林_沙琪马3 小时前
深入理解 @JsonGetter:精准掌控前端返回数据格式!
java·前端