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

责任链模式+策略模式在项目中的实践

1. 责任链模式实现分析

核心组件
  1. IProcessRule 接口

    • 定义责任链节点行为:filter(过滤逻辑)和 next(获取下一节点)。
    • 符合责任链的“处理-传递”模式。
  2. AbstractProcessRule 抽象类

    • 实现公共逻辑:处理链式调用(若当前规则过滤后仍有多个候选,继续调用下一个规则)。
    • 子类只需实现 doFilter 方法,聚焦具体规则逻辑,符合 模板方法模式
  3. 具体规则类(如 DistanceRule

    • 继承 AbstractProcessRule,实现 doFilter 方法,例如按距离排序。
责任链执行流程
// 示例:构建责任链
IProcessRule chain = new DistanceRule(new ScoreRule(new CapacityRule(null)));

// 执行过滤
List<ServeProviderDTO> candidates = chain.filter(providers);
  1. 调用 DistanceRule.doFilter() 按距离排序。
  2. 若结果数量 >1,调用 ScoreRule.doFilter() 按评分排序。
  3. 若仍 >1,调用 CapacityRule.doFilter() 按接单能力排序。
  4. 最终返回唯一候选或最终列表。

2. 策略模式与责任链的结合

策略模式的角色
  • 策略接口:定义派单策略的入口方法(如 DispatchStrategy#dispatch)。
  • 具体策略类:每个策略对应一组责任链规则。例如:
    public class PriorityDistanceStrategy implements DispatchStrategy {
        private IProcessRule ruleChain;
    
        public PriorityDistanceStrategy() {
            // 策略1的规则链:距离 → 评分
            ruleChain = new DistanceRule(new ScoreRule(null));
        }
    
        @Override
        public ServeProviderDTO dispatch(List<ServeProviderDTO> providers) {
            List<ServeProviderDTO> result = ruleChain.filter(providers);
            return CollUtils.isEmpty(result) ? null : result.get(0);
        }
    }
    
扩展性优势
  • 新增策略:创建新类(如 CapacityFirstStrategy)并定义其规则链。
  • 新增规则:继承 AbstractProcessRule 实现新逻辑,无需修改已有代码。

http://www.kler.cn/a/576474.html

相关文章:

  • ​‌uniqid()函数‌是PHP中用于生成唯一标识符的内置函数​
  • 自学微信小程序的第十四天
  • 前端算法库CryptoJS 有哪些格式转换
  • 【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程
  • 2025年03月07日Github流行趋势
  • 【PostgreSQL】如何免密使用PostgreSQL数据库内置工具
  • vue3页面html导出word文档
  • android studio开发文档
  • HarmonyOS 应用程序包结构 (编译态)
  • 低代码平台的后端架构设计与核心技术解析
  • Spring面试问答
  • 鸿蒙生态日日新,夸克、顺丰速运、驾校一点通等多款应用功能更新
  • MC9S12单片机上电初始化过程及BOOTLOADER分析
  • 国自然面上项目|基于海量多模态影像深度学习的肝癌智能诊断研究|基金申请·25-03-07
  • 阿里云操作系统控制台——ECS操作与性能优化
  • 编写一个基于OpenSSL的SSL/TLS服务端(HTTPS)可运行的完整示例
  • 13.数据结构(软考)
  • Redis优化秒杀
  • 我的第一个CVE漏洞挖掘之旅
  • 可视化+图解:轻松搞定链表