策略模式通过多态实现运行时动态切换:上下文面向统一接口编程,具体策略实例决定执行逻辑;各语言用接口/抽象类/trait定义契约,具体策略独立实现互不干扰,上下文持有策略引用并支持随时替换,客户端按需切换即刻生效。

多态是策略模式能实现运行时动态切换的核心支撑。它让上下文对象只需面向统一接口编程,而实际执行哪个算法,由当前绑定的具体策略实例决定——这个过程完全在运行时发生,无需重新编译代码。
策略接口定义统一契约
所有具体算法必须实现同一个接口(或抽象类),确保方法签名一致。这是多态调用的前提:
- Java 中用 interface 或 abstract class 声明公共方法,如
pay(double amount)、sort(int[] data) - C++ 中用含纯虚函数的基类,如
virtual void execute() const = 0; - Python 中靠约定或 ABC(Abstract Base Class)约束,如定义
execute(self, a, b)抽象方法 - Rust 中用 Trait,如
trait Formatter { fn format(&self, data: &HashMap<string u32>, buf: &mut String); }</string>
具体策略各自实现,互不干扰
每个算法封装在一个独立类中,只负责自己的逻辑。新增策略不修改已有代码:
-
支付宝支付策略:实现
pay()方法,调用支付宝 SDK 接口 -
微信支付策略:实现同一
pay()方法,调用微信统一下单 API -
文本格式化策略:实现
format(),按行拼接键值对 -
JSON 格式化策略:实现同一
format(),调用 serde_json 序列化
上下文持有策略引用,支持随时替换
上下文类不写死任何算法,只持有一个策略接口类型的变量,并提供设置入口:
- Java 示例:
public void setStrategy(PaymentStrategy strategy) { this.strategy = strategy; } - C++ 示例:
void set_strategy(const PaymentStrategy* s) { strategy = s; }(指针)或std::unique_ptr<paymentstrategy></paymentstrategy>(智能指针) - Python 示例:
def set_strategy(self, strategy): self._strategy = strategy - 调用时统一写法:
strategy.execute(...)—— 编译器/解释器自动路由到实际类型的方法
客户端按需切换,行为即时生效
业务逻辑根据条件创建不同策略对象,注入上下文后立即生效:
- 用户选择“微信支付”,就执行
context.setStrategy(new WechatPayStrategy()) - 导出报表时参数为
format=json,就传入JsonFormatter实例 - 数据量小于 100 用冒泡排序,否则切到快速排序:
sorter.setStrategy(new QuickSortStrategy()) - 切换后首次调用
context.execute(...),就会执行新策略的逻辑,无延迟、无重启











