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

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 实现新逻辑,无需修改已有代码。
相关推荐
我命由我1234515 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
咖啡八杯16 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
RestCloud16 小时前
借助ETL工具,实现AI智能体+数据的落地
数据仓库·人工智能·sql·etl·etlcloud·数据集成平台·java脚本
AIGS00117 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
记忆停留w17 小时前
从单体到微服务:Redis 协同 MySQL、Milvus、MinIO 搭建企业级RAG/AI Agent脚手架架构
大数据·人工智能·redis·微服务·ai·架构·milvus
KaMeidebaby17 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
小二·18 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手18 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌18 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存