TypeScript设计模式(9):适配器模式

112 阅读2分钟

适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)是一种结构型设计模式,它用于将一个接口转换成客户端所期望的另一个接口。适配器模式在 TypeScript 开发中非常有用,尤其是在整合不同的库或遗留代码时。

适配器模式的原理

适配器模式的核心思想是创建一个适配器(Adapter)类,该类封装原有的接口,并对外提供符合新需求的接口。

适配器模式有两种实现方式:

  1. 对象适配器(Object Adapter) - 通过组合的方式适配对象。
  2. 类适配器(Class Adapter) - 通过继承的方式适配类(在 TypeScript 中由于单继承限制,通常使用对象适配器)。

示例:使用适配器模式适配旧接口

假设我们有一个老旧的支付系统 OldPaymentSystem,它使用 processPayment(amount: number) 方法进行支付。但新系统需要 NewPaymentSystem,它使用 pay(amount: number, currency: string) 方法。我们可以使用适配器模式来解决兼容性问题。

// 旧的支付系统
class OldPaymentSystem {
  processPayment(amount: number): void {
    console.log(`Processing payment of ${amount} using OldPaymentSystem`);
  }
}

// 新的支付接口
interface NewPaymentSystem {
  pay(amount: number, currency: string): void;
}

// 适配器类
class PaymentAdapter implements NewPaymentSystem {
  private oldPaymentSystem: OldPaymentSystem;

  constructor(oldPaymentSystem: OldPaymentSystem) {
    this.oldPaymentSystem = oldPaymentSystem;
  }

  pay(amount: number, currency: string): void {
    console.log(`Converting currency: ${currency} to default currency (assumed USD)`);
    this.oldPaymentSystem.processPayment(amount);
  }
}

// 使用适配器
const oldSystem = new OldPaymentSystem();
const adapter = new PaymentAdapter(oldSystem);

adapter.pay(100, 'EUR');

适配器模式的应用场景

  • 需要使用一个已存在的类,但它的接口与需求不匹配。
  • 统一多个类的接口,使其能够在相同的环境下工作。
  • 适配第三方库,使其符合当前系统的接口需求。

适配器模式的优缺点

优点:

  • 解耦旧系统和新系统,减少修改原代码的风险。
  • 使得原本不兼容的类可以协同工作。
  • 便于扩展和维护。

缺点:

  • 可能会增加额外的代码量,带来一定的复杂度。
  • 过多使用适配器可能意味着设计上的问题,可能需要从根本上优化系统。

总结

适配器模式是一种非常实用的模式,特别是在处理遗留代码、兼容不同的 API 以及整合第三方库时。在 TypeScript 中,适配器通常采用对象适配器方式来实现,因为 TypeScript 只支持单继承。合理使用适配器模式可以提高代码的灵活性和可维护性。