Adapterパターン - TypeScriptでのインターフェース互換性

互換性のないインターフェースを連携させるAdapterパターンを学びましょう。レガシー統合、APIラッパー、サードパーティライブラリのTypeScript実装例。

Structural

詳細な説明

Adapterパターン

Adapterパターンは、クラスのインターフェースをクライアントが期待する別のインターフェースに変換します。互換性のないインターフェースのために連携できなかったクラスを協調させることができます。

2つの種類

  1. オブジェクトAdapter(合成): Adapterがadapteeへの参照を保持し、呼び出しを委譲します。これがほとんどの言語で推奨されるアプローチです。
  2. クラスAdapter(継承): Adapterがターゲットインターフェースとadapteeクラスの両方を拡張します。多重継承が必要で、TypeScriptではほとんど使用されません。

Adapter vs Facade

どちらもインターフェースを簡素化しますが、理由が異なります。Adapterは既存のインターフェースをターゲットインターフェースに一致させます(同じ機能、異なる形状)。Facadeは新しいシンプルなインターフェースを提供して複雑なサブシステムを簡素化します(機能の削減、使いやすさの向上)。

使用する場面

コードベースとは異なるインターフェースを持つサードパーティライブラリを統合する必要がある場合、あるAPIから別のAPIに段階的に移行する場合、またはそれぞれ独自のAPIを持つ複数の実装に一貫したインターフェースを作成する場合にAdapterを使用しましょう。

ユースケース

Adapterは、統一的な決済インターフェースの背後にサードパーティ決済ゲートウェイ(Stripe、PayPal)を統合する場合、レガシーREST APIを現代のGraphQLリゾルバーに合わせてラップする場合、データフォーマット間の変換(XMLからJSONアダプター)、データベースドライバー抽象化の作成に不可欠です。

試してみる — Design Pattern Reference

フルツールを開く