Adapter パターンとは?
API(互換性のないインターフェース)同士を適合させるためのパターンです。既存のコードの変更をせずに、再利用することで新しい機能を提供するというものです。再利用するコードには変更を加えないというのが特徴です。 主にコードを再利用するためという後天的理由から成り立っているパターンです。(設計段階でラッパーを用意するパターンはBridgeパターンです。)
構造
##TargetClass API(インターフェース)の定義をします。
AdapteeClass
TargetClassに適合させる既存のAPIを提供します。
AdapterClass
AdapteeClassのAPIをTargetClassから利用できるように変換します。
メリット
既存のコードを修正なしで再利用できる
既存のクラスにラッピングする形で実装するため、既存のコードを修正する必要がありません。
クライアント側が既存APIの実装を意識する手間を省ける
要は既存APIの変更がクライアント側の変更に影響しないということです。
公開するAPIを自由に制限できる
APIを適合させる際にAPIのアクセスを制限することができます。
デメリット
- 適合させるレイヤー増えるとパフォーマンスに影響がでる可能性がある
使いドコロ
既存の実績あるクラスを再利用したい時など。
実装例(※githubにリポジトリあります。)
継承を使ったパターン
委譲を使ったパターン
ラッパー部分が異なるだけで、クライアント側コードは同じです。 委譲とは、具体的な処理を別のクラスに任せるという意味です。 DIのような・・といっては語弊があるでしょうか・・・(゜-゜)
まとめ
- 既存のコードを間接的に再利用するラッパークラスを用意する。
- ラッパークラスは継承ベース、委譲ベースがある。
関連キーワード
- Bridgeパターン