策略模式通过分离“选逻辑”与“执行逻辑”,用统一接口、独立策略类、查找表调度及数据自带行为,消除冗长分支判断。

用策略模式消除 JavaScript 中冗长的分支判断,核心是把“选哪个逻辑”和“这个逻辑怎么执行”彻底分开,而不是简单替换 if-else 语法。它真正起效的前提,是让类型或上下文自己决定行为,而不是靠一堆条件去猜。
定义统一行为接口,只暴露“做什么”,不暴露“怎么做”
先抽象出所有分支共有的动作,比如处理订单、生成提示、响应错误——这些都该有一个清晰的方法名,如 execute()、handle() 或 getHint()。接口里不要放 type 字段,也不写 instanceof 判断点,只约定输入输出。例如:
- interface PaymentStrategy { process(amount: number, context: object): Promise
} - interface HintProvider { getHint(board: Board, cells: Cell[]): string }
每个分支对应一个独立策略类,互不干扰
原来 if (type === 'alipay') { ... } 的那段逻辑,现在变成一个 AlipayStrategy 类;if (type === 'wechat') { ... } 就是 WechatStrategy。每个类只专注自己那件事,不关心别的分支是否存在,也不查别人的状态。新增一种支付方式?加个新类,实现接口,两行代码注册进去即可,主流程完全不动。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
用查找表集中调度,主流程只剩一次调用
把所有策略实例预先存进一个对象或 Map,key 是类型标识(如字符串 'alipay'、数字 101、枚举值),value 是对应策略实例:
- const strategyMap = { alipay: new AlipayStrategy(), wechat: new WechatStrategy() };
- const strategy = strategyMap[order.paymentType]; if (strategy) await strategy.process(order.amount, order);
这样就把分散在多处的 if-else 或 switch 全部收束到一处注册+一处查找,扩展性、可测性、可读性同步提升。
让数据自带行为能力,从根源上消灭判断
更进一步的做法,是让业务对象自己持有或能获取对应策略。比如错误对象直接实现 handle() 方法,事件对象自带 dispatch() 能力。这时处理器里就不再写 if (e instanceof ValidationError),而是直接调 e.handle(context)。instanceof 出现次数从几十次降到零,连注册表都不用改——只要新类实现了接口,系统自然识别。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










