当前位置: 首页 > news >正文

责任链设计模式

一、核心接口定义

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

import org.springframework.core.Ordered;public interface MyAbstractChainHandler<T> extends Ordered {void handle(T requestParam);String getChainName();
}

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

二、处理上下文实现

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

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));}}@Overridepublic 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. 可维护性:清晰的结构便于维护和调试。

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

相关文章:

  • vue3的深入组件-组件 v-model
  • 免费AI图像编辑平台,最新无损放大技术
  • 无刷电机控制算法策略
  • 985高校查重率“隐性阈值”:低于5%可能被重点审查!
  • 4:点云处理—去噪、剪切、调平
  • RT Thread Studio修改控制台串口
  • 【杂谈】Godot 2D游戏窗口设置
  • NeurIPS 2024 | 工业质检缺陷检测相关论文梳理
  • OpenCV定位地板上的书
  • 了解Dockerfile
  • cat、more和less的区别
  • WHAT - ahooks vs swr 请求
  • 【万字长文】深入浅出 LlamaIndex 和 LangChain:从RAG到智能体,轻松驾驭LLM应用开发
  • 关于form、自定义Hook、灰度发布、正则表达(只能输入数字和不要空格)
  • kafka logs storage
  • 【LeetCode 热题 100】二叉树 系列
  • 深入解析 C# 常用数据结构:特点、区别与优缺点分析
  • 快速上手Pytorch Lighting框架 | 深度学习入门
  • 经济体制1
  • 网络基础入门第6-7集(抓包技术)
  • 上海国际电影节推出三大官方推荐单元,精选十部优秀影片
  • 新村回响:一周城市生活
  • 明星同款撕拉片,为何能炒到三四百一张?
  • 江西省直机关工委副书记熊亮华履新宜春市委常委、宣传部部长
  • 上海楼市“银四”兑现:新房市场高端改善领跑,二手房量价企稳回升
  • 光大华夏:近代中国私立大学遥不可及的梦想