📌 先看什么是策略模式(Strategy Pattern)
策略模式的核心是:
将一组算法封装成可互换的对象,并通过接口调用不同策略来改变行为。
它的结构通常是:
抽象策略(Strategy)
↑
具体策略(ConcreteStrategy)
↑
上下文(Context)持有策略实例
🧪 用 Dart sealed class 实现策略模式:例子
比如我们要实现一个“支付策略”系统,支持微信支付、支付宝、Apple Pay。
Dart 3 的 sealed class + 模式匹配可以让代码更简洁:
sealed class PaymentStrategy {
void pay(double amount);
}
class WeChatPay extends PaymentStrategy {
@override
void pay(double amount) => print('微信支付 $amount 元');
}
class Alipay extends PaymentStrategy {
@override
void pay(double amount) => print('支付宝支付 $amount 元');
}
上下文类(Context):
class PaymentContext {
PaymentStrategy strategy;
PaymentContext(this.strategy);
void checkout(double amount) {
strategy.pay(amount);
}
}
✅ 总结:sealed class 与策略模式的关系
| 项目 | 是否符合策略模式的思想 |
|---|---|
| 封装多个可替换行为 | ✅ |
| 通过抽象类调用不同实现 | ✅ |
| 能动态替换行为策略 | ✅ |
| sealed class 是策略模式吗? | ❌(它只是语法工具) |
| 可以用 sealed class 实现策略模式? | ✅ |
🎯 最后一句话总结:
sealed class是 Dart 提供的语言工具,它不是策略模式,但非常适合用来优雅地实现策略模式,尤其在你想确保所有策略类都来自一个有限集合时。