java设计模式 -【责任链模式】

责任链模式定义

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,允许将请求沿着处理链传递,直到有一个处理者能够处理该请求。这种模式解耦了请求的发送者和接收者,允许多个对象有机会处理请求,责任链模式通过分离请求和处理逻辑,提供了一种灵活的任务分配机制,适用于需要动态指定处理对象的场景。

核心组件

Handler(抽象处理者)

定义处理请求的接口,通常包含一个指向下一个处理者的引用(后继者)

java 复制代码
public abstract class Handler {
    protected Handler successor;
    
    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }
    
    public abstract void handleRequest(Request request);
}

ConcreteHandler(具体处理者)

实现抽象处理者的接口,决定是否处理请求或将其传递给链中的下一个处理者

java 复制代码
public class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(Request request) {
        if (request.getType().equals("TypeA")) {
            // 处理请求
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

Request(请求)

封装请求的细节,通常包含处理所需的参数或类型

java 复制代码
public class Request {
    private String type;
    // 其他字段及方法
}

典型应用场景

多级审批流程:如请假审批需经过部门经理、HR、CEO等层级。

事件处理系统:如GUI中的事件冒泡机制。

日志过滤:不同级别的日志(DEBUG、INFO、ERROR)由不同处理器处理。

示例代码

以下是一个简单责任链实现:

java 复制代码
// 抽象处理者
abstract class Logger {
    public static int INFO = 1;
    public static int DEBUG = 2;
    protected int level;
    protected Logger nextLogger;

    public void setNextLogger(Logger nextLogger) {
        this.nextLogger = nextLogger;
    }

    public void logMessage(int level, String message) {
        if (this.level <= level) {
            write(message);
        }
        if (nextLogger != null) {
            nextLogger.logMessage(level, message);
        }
    }

    abstract protected void write(String message);
}

// 具体处理者
class ConsoleLogger extends Logger {
    public ConsoleLogger(int level) {
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("Console: " + message);
    }
}
 
相关推荐
wei198621几秒前
.net添加web引用和添加服务引用有什么区别?
java·前端·.net
Full Stack Developme3 分钟前
正则表达式的使用教程
java·数据库·正则表达式
SeeYa-J1 小时前
Sprint 1-2:创建第一个 Spring Boot Module(user-service)
java·spring boot·sprint
atunet1 小时前
关于算法设计模式的演化与编程范式变迁的技术7
算法·设计模式
云絮.1 小时前
数据库事务
java·开发语言·数据库
格子软件1 小时前
2026年GEO优化系统源码级状态机与多模型调度拆解
java·前端·vue.js·人工智能·vue·geo
Full Stack Developme2 小时前
Java 漏斗算法 及应用场景
java·开发语言·算法
从此以后自律2 小时前
Spring 全家桶
java·后端·spring
偏爱自由 !2 小时前
一(0.1):配置git
java·git·intellij-idea