デザインパターン学習メモ:「Adapter」
このパターンの目的
GoF本より引用する。
あるクラスのインタフェースを、クライアントが求める他のインタフェースに変換する。Adapterパターンは、インタフェースに互換性のないクラス同士を組み合わせることができるようにする。(P.149)
このパターンによって、すでに存在するクラスを任意のインタフェースに適合させることができる。
実装例
『アジャイルソフトウェア開発の奥義』(P.404) を参考に作成。
// 自由に改変できないサードパーティ製ライブラリに含まれるクラスとする
// Adapteeの役割
public class Light {
public void on() {
// 何らかの実装
}
public void off() {
// 何らかの実装
}
}
// 開発中のプロジェクトで要求されるインタフェース
// Targetの役割
public interface Switchable {
void turnOn();
void turnOff();
}
// Adapterの役割
public class LightAdapter implements Switchable {
private Light light;
public LightAdapter(Light light) {
this.light = light;
}
@Override
public void turnOn() {
light.on();
}
@Override
public void turnOff() {
light.off();
}
使用するシーン
開発中のプロジェクトにおいて、Switchableインタフェースを用いてポリモーフィズムに則った動作を行うとしているとする。
サードパーティ製ライブラリにLightクラスを見つけ、ほしい機能が揃っていたのでぜひこれを使いたいが、このクラスはもちろんSwitchableインタフェースを実装していない。
そのようなときに、LightAdapterクラスを作成し、SwitchableのインタフェースからLightクラスの機能を呼び出すことで、望み通りのインタフェースとLightクラスの機能が手に入る。
2種類のAdapter
オブジェクトに適用するAdapterパターン
- 実装例で示したもの
- AdapterがAdapteeのオブジェクトをクラス内部に持ち、必要な処理を委譲する
クラスに適用するAdapterパターン
- 多重継承を用いて、TargetとAdapteeを継承するAdapterクラスを作成する
- 多重継承を認めるC++などで使用可能
Javaでは「オブジェクトに適用するAdapterパターン」を使うことになるだろう。
それぞれの利点については、GoF本を参照してほしい。
参考文献
- エリック ガンマ、ラルフ ジョンソン、リチャード ヘルム、ジョン プリシディース(1999)『オブジェクト指向における再利用のためのデザインパターン 改訂版』本位田 真一、吉田 和樹 監訳、SBクリエイティブ
- ロバート・C・マーチン(2004)『アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技』瀬谷啓介訳、SBクリエイティブ
Author And Source
この問題について(デザインパターン学習メモ:「Adapter」), 我々は、より多くの情報をここで見つけました https://qiita.com/aki3061/items/db85002fa65c13e14429著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .