设计模式-责任链模式

设计模式-责任链模式

责任链模式(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'
相关推荐
咸鱼2.01 小时前
【java入门到放弃】跨域
java·开发语言
indexsunny1 小时前
互联网大厂Java求职面试实战:微服务与Spring生态全攻略
java·数据库·spring boot·安全·微服务·面试·消息队列
沐苏瑶1 小时前
Java 搜索型数据结构全解:二叉搜索树、Map/Set 体系与哈希表
java·数据结构·算法
sg_knight1 小时前
设计模式实战:模板方法模式(Template Method)
python·设计模式·模板方法模式
冬夜戏雪1 小时前
实习面经记录(十)
java·前端·javascript
skiy2 小时前
java与mysql连接 使用mysql-connector-java连接msql
java·开发语言·mysql
平生不喜凡桃李2 小时前
浅谈 Linux 中 namespace 相关系统调用
java·linux·服务器
zb200641202 小时前
CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现
java·后端·spring
2401_895521342 小时前
spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter
java·人工智能·spring
何仙鸟2 小时前
GarmageSet下载和处理
java·开发语言