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);
    }
}
 
相关推荐
我崽不熬夜4 分钟前
Java中的String、StringBuilder、StringBuffer:究竟该选哪个?
java·后端·java ee
草明26 分钟前
docker stats 增加一列容器名称的显示
java·开发语言·docker
期待のcode30 分钟前
Maven的概念与Maven项目的创建
java·maven
我崽不熬夜44 分钟前
Java中的基本数据类型和包装类:你了解它们的区别吗?
java·后端·java ee
我是廖志伟1 小时前
【jar包启动,每天生成一个日志文件】
java·jar
牛奶咖啡131 小时前
学习设计模式《二十三》——桥接模式
学习·设计模式·桥接模式·认识桥接模式·桥接模式的优点·何时选用桥接模式·桥接模式的使用示例
掉鱼的猫1 小时前
Solon StateMachine 实现状态机使用示例详解
java·状态机
用户6135411460161 小时前
BurpSuite 1.4.07.jar 怎么使用?详细安装和抓包教程(附安装包下载)
java
ankleless1 小时前
Spring 框架深度解析:从核心原理到实战应用
java·spring
带刺的坐椅2 小时前
Spring AOP 与 Solon AOP 有什么区别?
java·spring·solon·aop