策略模式核心是将变的业务逻辑抽象为接口,各实现类独立封装具体规则,通过上下文动态切换,新增策略无需修改原有代码。

Java 中用接口实现策略模式,核心是把“变的部分”抽成接口,让每种业务规则变成独立的实现类,运行时按需切换,不改老代码就能加新逻辑。
定义统一策略接口
接口只声明行为契约,不关心怎么实现。比如支付场景:
- 用 public interface PaymentStrategy 声明 pay(double amount) 和 support(String type) 方法
- support() 用于后续自动匹配(比如传入 "alipay" 就选支付宝策略),避免客户端硬编码类型判断
- 接口方法尽量精简,聚焦一个职责,别塞一堆参数或返回复杂对象
写多个具体策略实现类
每个业务分支写一个类,互不影响:
- AlipayStrategy 实现支付宝签名、回调地址拼接等专属逻辑
- WechatPayStrategy 处理微信预下单、JSAPI 参数组装
- 新增“云闪付”?只需新增 UnionPayStrategy 类,不碰已有代码
- 构造器可接收差异化参数(如商户号、密钥),体现策略的可配置性
用上下文封装调用和切换逻辑
Context 不做业务判断,只负责“转发”和“换人”:
- 持有一个 PaymentStrategy 引用,通过构造器或 setter 注入
- 提供 execute(double amount) 方法,内部直接调用 strategy.pay(amount)
- 如果需要根据订单类型自动选策略,可在 context 里加一个 resolveStrategy(Order order) 方法,查表或匹配规则后返回对应实例
结合 Spring 更省力
不用手动 new 策略对象,交给容器管理:
- 所有策略类加 @Component,接口用 @Qualifier 或自定义注解(如 @PayType("alipay"))标识
- 用 Map
注入所有实现,key 是策略类型名,查 map 比 if-else 快且易扩展 - 搭配 @ConfigurationProperties 可动态开关某类策略(比如灰度期间禁用微信支付)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











