Android、Java、Web系、Linux、マラソン等の備忘録

2011/09/11

Design Pattern : Adapter

0 件のコメント

どんなパターン?


  • インタフェースに互換のないもの同士を組み合わせる事ができるようにする。
  • 既存クラスに一皮かぶせて必要とするクラスを作る


具体的な例を挙げるなら、増補改訂版Java言語で学ぶデザインパターン入門にも取り上げられているように、ノートパソコン等のACアダプターの例が分かりやすいと思う。

designpatternadapter


当たり前の事だが、ノートパソコンを動かすには直流12Vの電源が必要で、コンセントの交流100Vの電源をACアダプターを使って、直流12Vに変換している。

このように、「既に提供されているもの(交流100V)」と「必要なもの(直流12V)」のギャップを埋めてくれるのがAdapterでこのような考え方をデザインパターンにしたのが、Adapterパターン。

どんな場合に適用できる?


  • 既存のクラスのインタフェースが必要なインタフェースと一致していない場合
  • 既存のクラスを利用することで、実装工数やテスト工数が大幅に削減できる(テスト実績があるクラスを利用したい)場合
  • バージョンアップ等により古い版と新しい版の互換性を持たせて共存させたい場合

テスト実績があるクラスを利用している場合、もしバグが発生しても、Adapter役のクラスを重点的にチェックすれば良い。もし、Adapterパターンを適用する際に、既存クラスもいぢってしまうと、テスト範囲が既存クラスにまで及ぶので、注意が必要。

構造(継承を使ったもの)


WS000197

構造(委譲を使ったもの)


WS000198

構成要素


Target Clientが必要とするメソッドのインタフェースを定義
Client Targetのインタフェースを利用して仕事を行う
Adaptee 既存の(テスト実績があるなどの)クラス。一皮かぶせられるクラス
Adapter AdapteeクラスのインタフェースをTargetクラスのインタフェースに適合させる。一皮かぶせるクラス

0 件のコメント :

コメントを投稿