• 【灵动之链】打造高效处理架构的双轨组合模式实战


    打造高效处理架构的双轨组合模式实战

    在这里插入图片描述

    目标概述

    本教程旨在阐述两种不同的组合模式实现方式,重点在于如何构建灵活的处理链,以适应不同场景下的需求,如单据处理与工作流调度。我们将基于提供的设计思路,重新定义类名并实施脱敏处理,以保护具体业务逻辑细节。
    在这里插入图片描述

    场景一: 注解驱动的Chain
    设计说明
    • 核心接口SingleDocumentHandler(普通处理器接口)与 SingleDocumentHandlerChain(链式处理器接口)。
    • 注解:自定义注解如@DocumentHandler用于标记处理器类及其处理的类型。
    • 实现方式:利用注解扫描与反射机制自动构建处理器链,通过类名或注解中的键值匹配来决定处理器的执行。
    // 自定义注解,用于标记处理器
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface DocumentHandler {
        String key(); // 类型的唯一标识
    }
    
    // 普通处理器接口
    public interface SingleDocumentHandler {
        void handle(DocumentContext context);
    }
    
    // 链式处理器基类,实现了普通处理器接口
    public abstract class AbstractDocumentHandlerChain implements SingleDocumentHandler {
        private SingleDocumentHandler next; // 下一个处理器引用
    
        public void setNext(SingleDocumentHandler handler) {
            this.next = handler;
        }
    
        // ...其他辅助方法
    }
    
    // 示例处理器实现
    @DocumentHandler(key = "ORDER_PROCESS")
    public class OrderProcessingHandler extends AbstractDocumentHandlerChain {
        @Override
        public void handle(DocumentContext context) {
            // 处理逻辑
            if (next != null) {
                next.handle(context);
            }
        }
    }
    
    场景二:工作流调度 - List与Set注入的Chain
    设计说明
    • 核心接口WorkflowTaskDispatcher(任务分发接口)与 WorkflowTaskResolver(任务解析器接口)。
    • 实现方式WorkflowDispatcherChain仅实现WorkflowTaskDispatcher,包含一个List成员,通过构造函数或setter注入解析器集合。解析器直接实现WorkflowTaskResolver,无需实现WorkflowTaskDispatcher
    // 任务分发接口
    public interface WorkflowTaskDispatcher {
        void dispatch(TaskContext task);
    }
    
    // 任务解析器接口
    public interface WorkflowTaskResolver {
        boolean canResolve(TaskContext task);
        void resolve(TaskContext task);
    }
    
    // 链式调度器实现
    public class WorkflowDispatcherChain implements WorkflowTaskDispatcher {
        private final List<WorkflowTaskResolver> resolvers;
    
        public WorkflowDispatcherChain(List<WorkflowTaskResolver> resolvers) {
            this.resolvers = resolvers;
        }
    
        @Override
        public void dispatch(TaskContext task) {
            for (WorkflowTaskResolver resolver : resolvers) {
                if (resolver.canResolve(task)) {
                    resolver.resolve(task);
                    return;
                }
            }
            // 如果没有找到合适的解析器,则...处理逻辑
        }
    }
    
    // 示例解析器
    public class ApprovalTaskResolver implements WorkflowTaskResolver {
        @Override
        public boolean canResolve(TaskContext task) {
            // 判断逻辑
            return task.getType().equals("APPROVAL");
        }
    
        @Override
        public void resolve(TaskContext task) {
            // 解析与处理逻辑
        }
    }
    
    总结

    上述代码展示了两种不同场景下组合模式的实现策略。单据处理系统侧重于通过注解和反射简化配置,增强灵活性;而工作流调度系统则通过明确的职责分离和构造注入来确保任务的有序分发与处理。两者均体现了组合模式的核心思想——将请求沿着处理器链传递,直至被适当处理。

  • 相关阅读:
    ROS安装
    21-关键帧动画
    运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出
    25K测试老鸟7年经验的面试心得,四种公司、四种问题…
    单片机——将P1口状态送入P0、P2和P3口
    逼的测试/开发程序员是不是都这样?心无旁骛......
    性能测试之基准测试
    牛客多校九 - Here is an Easy Problem of Zero-chan (树形DP,推公式,贡献)
    Active Directory用户登录报告
    这一题的后缀表达式应该怎样求?
  • 原文地址:https://blog.csdn.net/qq_59224200/article/details/139628902