策略模式重构的核心是将条件分支从硬编码判断转为查表、调用、可插拔结构;通过对象映射或类封装策略,支持语义化键名、兜底处理、依赖注入、自主识别(supports方法)及分层嵌套,提升清晰度、可扩展性与可维护性。

条件分支过多时,用策略模式重构的核心是把“根据输入选逻辑”这件事从硬编码判断中抽离出来,变成查表、调用、可插拔的结构。它不追求一步到位消灭所有 if,而是让分支更清晰、新增更安全、维护更省力。
用对象映射替代 if-else 链
这是最轻量、最常用的重构方式。把每个分支的处理逻辑封装成函数,用一个普通对象做键值映射。
- 键名用语义化字符串(如 'vip'、'batch'),避免魔法值
- 值是纯函数,只负责本分支的计算或操作,不耦合其他分支逻辑
- 未命中时用 || 提供兜底策略:
strategies[type]?.(data) || strategies.default?.(data) - 新增类型只需往对象里加一项,原函数体完全不动
需要状态或依赖时用类封装策略
当策略要访问 API 客户端、日志实例、配置项,或者需在运行时动态注册,对象字面量就不够用了。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 每个策略写成独立 class,构造时注入所需依赖,便于单元测试
- 用 Map 替代普通对象,支持 Symbol、对象等非常规 key
- 搭配工厂函数统一调度,比如
getStrategy(input),内部调用各策略的 supports() 方法自主判断是否适用 - 模块加载时可自动注册自己到全局策略池,主流程无感知
让识别逻辑也交给策略自己决定
真正的解耦,不是把 if 搬到工厂里,而是让每个策略自己回答“我能处理这个输入吗?”
立即学习“Java免费学习笔记(深入)”;
- 每个策略实现 supports(input) 方法,支持精确匹配、正则、前缀、数值范围等多种判断方式
- 匹配规则可外置为 JSON 配置,例如
{type: 'payment', rules: {method: '^alipay.*$'}},运行时加载 - 这样连“怎么选策略”都可替换,新增识别维度也不用改调度层
复杂场景下分层嵌入流程控制
策略模式擅长“同一件事、多种做法”,但业务常有多级判断。这时要配合传统流程控制,而不是硬塞进一个大映射表。
- 外层用 if 或 switch 划分大类(如
if (isBatch) { useBatchHandler() }) - 内层再交由对应策略族处理细节(如批量处理器里按文件格式选 parser)
- 递归结构中,每个节点类型绑定专属策略,switch 只留一层类型分发,其余交给策略递归执行
- 按业务维度合理切分层级,避免所有条件挤在一个巨型策略对象里

















