Open kurodakazumichi opened 6 years ago
interface ProductPrice{
public int getPrice();
}
class Product{
private int cost;
public int getCost(){
return cost;
}
}
class ProductAdapter extends Product implements ProductPrice{
public int getPrice(){
return this.getCost();
}
}
interface ProductPrice{
public int getPrice();
}
class Product{
private int cost;
public int getCost(){
return cost;
}
}
class ProductAdapter implements ProductPrice{
private Product product = new Product();
public int getPrice(){
return product.getCost();
}
}
要するとこれだ。 Adapter = 適合させるもの
一般家庭のコンセントとゲーム機をつなげるには 専用のアダプターが必要になる。
このアダプターは一般的なコンセントの形(インターフェース)と 一般的でないゲームの電源差すところの形を適合させている。
ゲームの電源差すところ自体は一切変更せずに 一般のコンセントに繋げるようにインターフェースが変更されるわけだ。
つまりは初めから既存のインターフェースに合わせておけば アダプターなんて不要なわけだ。
でもそれができず、さらに既存のものにも手を加えられない という状況になったときに使えるのがこのアダプターパターン。
自分が作ったプログラムで使う事があるとすれば 設計ミスったけどもう後戻りできないので苦し紛れの選択として使うか フレームワークなど、基本変更できないプログラムと自分のプログラムを適合させる場合 という感じだろうか
継承パターンの場合 C++にはinterfaceという機能がないので、同様の事をするためには 多重継承や抽象クラスなどを用いなければならない
逆にinterfaceが使える言語で、あるinterfaceに合わせたいという場面だと 非常に使い勝手のいいパターンと思われる。
多重継承も使いようによってはinterfaceと同じような振る舞いになるが あまり使いたいとは思えない。
Adapter WIkiを見ながら理解していくターン
Adapter パターン
効果・効能
なんか既存クラスを拡張できるような感じがしてくるが、実際はそうじゃない。 新しいクラスを作ってそのクラスで元のクラスの機能を利用するだけである。
方法