策略模式通过将算法抽象为接口,使上下文与具体实现解耦;定义统一PaymentStrategy接口,多个具体策略类(如AlipayStrategy)实现它;上下文PaymentContext持策略引用并支持运行时切换,实现行为动态替换。

核心思路是把变化的算法抽离成独立组件,让主类只依赖抽象,不绑定具体实现。只要策略接口稳定,增删改策略类都不影响上下文逻辑。
定义统一策略接口
所有行为变体都实现同一个接口,确保调用方式一致。比如支付场景:
// 定义行为契约,不关心谁来实现
public interface PaymentStrategy {
boolean pay(double amount);
String getMethod();
}
编写多个具体策略类
每个类专注一种行为逻辑,互不影响。新增微信支付?只需加一个新类:
- public class AlipayStrategy implements PaymentStrategy { ... }
- public class WechatStrategy implements PaymentStrategy { ... }
- public class CreditCardStrategy implements PaymentStrategy { ... }
上下文类持有策略引用
上下文不写死任何算法,只持有一个策略接口变量,并提供设置或切换入口:
public class PaymentContext {
private PaymentStrategy strategy;
public void setStrategy(PaymentStrategy strategy) {
this.strategy = strategy;
}
public boolean execute(double amount) {
return strategy.pay(amount); // 多态调用,实际执行哪个由运行时决定
}
}
运行时灵活切换策略
在业务代码中,随时替换策略实例即可改变行为,原类无需重编译:
- PaymentContext context = new PaymentContext();
- context.setStrategy(new AlipayStrategy());
- context.execute(100.0); // 走支付宝流程
- context.setStrategy(new WechatStrategy());
- context.execute(100.0); // 下次就走微信流程
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











