掌握 Dart 的 sealed class(四)

53 阅读1分钟

📌 先看什么是策略模式(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 提供的语言工具,它不是策略模式,但非常适合用来优雅地实现策略模式,尤其在你想确保所有策略类都来自一个有限集合时。