责任链设计模式

一、核心接口定义

MyAbstractChainHandler<T> 接口继承自 Ordered 接口,用于实现链式处理逻辑。

java 复制代码
import org.springframework.core.Ordered;

public interface MyAbstractChainHandler<T> extends Ordered {
    void handle(T requestParam);
    String getChainName();
}

handle 方法处理请求参数,getChainName 方法为处理器分组提供依据。

二、处理上下文实现

MyChainContext<T> 类实现 ApplicationContextAware 接口,管理链式处理过程。

java 复制代码
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

public class MyChainContext<T> implements ApplicationContextAware {
    private final Map<String, List<MyAbstractChainHandler>> chainContext = new ConcurrentHashMap<>();

    public void handler(String chainName, T requestParam) {
        List<MyAbstractChainHandler> chainHandlers = chainContext.get(chainName);
        if (chainHandlers != null) {
            chainHandlers.forEach(handler -> handler.handle(requestParam));
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, MyAbstractChainHandler> handerBeans = applicationContext.getBeansOfType(MyAbstractChainHandler.class);
        handerBeans.forEach((beanName, bean) -> {
            chainContext.computeIfAbsent(bean.getChainName(), k -> new ArrayList<>()).add(bean);
        });
        chainContext.forEach((chainName, handlers) -> {
            handlers.sort(Comparator.comparing(MyAbstractChainHandler::getOrder));
        });
    }
}

chainContext 存储处理链及对应处理器列表,handler 方法执行链式处理,setApplicationContext 方法获取 Bean 实例,按链名分组并排序。

三、机制优势与应用

  1. 解耦性:各处理器逻辑独立,降低代码耦合度。
  2. 扩展性:方便添加新处理器,适应业务变化。
  3. 灵活性:可调整处理器顺序,改变处理流程。
  4. 可维护性:清晰的结构便于维护和调试。

在电商系统订单处理等复杂业务场景中,可将不同处理环节设为独立处理器,通过此机制实现高效处理。

相关推荐
nnsix3 分钟前
设计模式 - 工厂模式 笔记
笔记·设计模式
迷渡10 分钟前
聊一聊 Bun 用 Rust 重写这件事
开发语言·后端·rust
古怪今人18 分钟前
Gradle构建工具 Groovy/Kotlin DSL的现代化自动化构建工具
开发语言·kotlin·自动化
赏金术士19 分钟前
Kotlin 协程与挂起函数(Coroutines & suspend)入门到实战
android·开发语言·kotlin
正儿八经的少年20 分钟前
Spring Boot 两种激活配置方式的作用与区别
java·spring boot·后端
云烟成雨TD33 分钟前
Spring AI Alibaba 1.x 系列【52】Interrupts 中断机制:节点执行前后静态中断
java·人工智能·spring
疯狂成瘾者42 分钟前
Spring Boot 项目中的 SMTP 邮件验证码服务技术解析
java·spring boot·后端
y = xⁿ1 小时前
Java并发八股学习日记
java·开发语言·学习
xifangge20251 小时前
【深度排障】从 OS 底层寻址剖析 javac 不是内部或外部命令 核心报错:变量空间隔离与自动化部署终极范式
java·开发语言·jdk·自动化
肖恩想要年薪百万1 小时前
JSP中常用JSTL标签
java·开发语言·状态模式