欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 责任链设计模式

责任链设计模式

2025/5/9 6:22:27 来源:https://blog.csdn.net/qq_42798343/article/details/147802662  浏览:    关键词:责任链设计模式

一、核心接口定义

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词