设计模式-责任链模式

设计模式-责任链模式

责任链模式(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 分钟前
深入理解 Java 虚拟机-01 JVM 内存模型
java·jvm··虚拟机栈·方法区
王家视频教程图书馆10 分钟前
android java 开发网路请求库那个好用请列一个排行榜
android·java·开发语言
花卷HJ11 分钟前
Android 文件工具类 FileUtils(超全封装版)
android·java
rchmin12 分钟前
ThreadLocal内存泄漏机制解析
java·jvm·内存泄露
黎雁·泠崖14 分钟前
Java 方法栈帧深度解析:从 JIT 汇编视角,打通 C 与 Java 底层逻辑
java·c语言·汇编
java资料站19 分钟前
springBootAdmin(sba)
java
AscendKing29 分钟前
接口设计模式的简介 优势和劣势
java
Vincent_Vang35 分钟前
多态 、抽象类、抽象类和具体类的区别、抽象方法和具体方法的区别 以及 重载和重写的相同和不同之处
java·开发语言·前端·ide
qualifying36 分钟前
JavaEE——多线程(3)
java·开发语言·java-ee
花卷HJ1 小时前
Android 下载管理器封装实战:支持队列下载、取消、进度回调与自动保存相册
android·java