什么是策略模式?
策略模式是一种优雅的设计模式,它允许我们在不修改原始代码的情况下,动态地选择和切换策略,从而提高代码的可扩展性和重用性。它主要通过封装不同的策略实现,将它们作为参数传入到主体类中,实现动态选择。
策略模式组件
- 策略接口 (定义共同行为)
- 策略实现类 (提供具体实现)
- 主体类 (策略使用者) (使用实现类实现其功能)
TypeScript 实现
比如,我们打造一个交给企业计算佣金的策略,如下所示:
// 策略接口
interface PaymentStrategy {
pay(amount: number): void;
}
// 策略实现类
class CreditCardPayment implements PaymentStrategy {
pay(amount: number): void {
console.log(`使用信用卡支付,金额:$${amount}`);
}
}
class PayPalPayment implements PaymentStrategy {
pay(amount: number): void {
console.log(`使用 PayPal 支付,金额:$${amount}`);
}
}
class BitcoinPayment implements PaymentStrategy {
pay(amount: number): void {
console.log(`使用 Bitcoin 支付,金额:$${amount}`);
}
}
// 主体类
class PaymentContext {
private strategy: PaymentStrategy;
constructor(strategy: PaymentStrategy) {
this.strategy = strategy;
}
setStrategy(strategy: PaymentStrategy) {
this.strategy = strategy;
}
executePayment(amount: number) {
this.strategy.pay(amount);
}
}
// 使用策略模式
const paymentContext = new PaymentContext(new CreditCardPayment());
paymentContext.executePayment(100); // 使用信用卡支付
paymentContext.setStrategy(new PayPalPayment());
paymentContext.executePayment(200); // 使用 PayPal 支付
paymentContext.setStrategy(new BitcoinPayment());
paymentContext.executePayment(300); // 使用 Bitcoin 支付
策略模式的优点
- 增强编码可扩展性:它允许在不修改原始代码的前提下添加新的策略。
- 处理动态行为切换:让系统可以在不同情况下选择适当的策略。
- 封装相关的行为:将不同的策略实现封装在独立类中,使系统更加清晰。
总结
策略模式是很有用的设计模式,它将不同的实现分隔开,使得系统可扩展性更强,代码更易于维护。在 TypeScript 中实现策略模式,可以通过接口和类结构来实现一套某一类行为的多种解决方案,提高代码的开发效率和维护性。