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);
    }
}
 
相关推荐
青云交9 小时前
Java 大视界 -- Java 大数据机器学习模型在元宇宙虚拟场景智能交互中的关键技术
java·机器学习·边缘计算·元宇宙·多模态融合·智能交互·情感计算
老任与码9 小时前
责任链模式
java·开发语言·责任链模式
哇!好大一个橙子9 小时前
Google浏览器及其对应版本chromedriver驱动下载(含最新版本)
java·python
安然~~~9 小时前
jvm之【垃圾回收器】
java·jvm
不宕机的小马达9 小时前
【Maven】Maven概述、安装以及其他相关知识
java·数据库·maven
鸽鸽程序猿9 小时前
【算法】【优选算法】BFS 解决边权相同最短路问题
java·算法·宽度优先
xiyangxiaoguo9 小时前
Qt QEventLoop的使用的一个问题讨论
java·前端·算法
卷Java9 小时前
百度智能云车牌识别API官方配置指南
java·开发语言·经验分享·vscode·学习·微信小程序·intellij idea
你的微笑,乱了夏天9 小时前
spring boot项目使用Torna生成在线接口文档
java·spring boot·中间件·postman
yujkss10 小时前
23种设计模式之【中介者模式】-核心原理与 Java 实践
java·设计模式·中介者模式