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);
    }
}
 
相关推荐
毕设源码-郭学长1 天前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
梨落秋霜1 天前
Python入门篇【文件处理】
android·java·python
Java 码农1 天前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
哈库纳玛塔塔1 天前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
S***q3771 天前
Spring Boot管理用户数据
java·spring boot·后端
天“码”行空1 天前
java面向对象的三大特性之一多态
java·开发语言·jvm
毕设源码-郭学长1 天前
【开题答辩全过程】以 基于SpringBoot框架的民俗文化交流与交易平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
好大哥呀1 天前
Java Web的学习路径
java·前端·学习
f***14771 天前
SpringBoot实战:高效实现API限流策略
java·spring boot·后端
on the way 1231 天前
day06-SpringDI 依赖注入
java·spring