【デザインパターン】Adapter

どんなもの?

  • あるクラスのインターフェースを、別のインターフェースへ変換する。アダプターはもともと適合しなかったインターフェースをもつ複数のクラス同士を協働させる。
  • 既存クラスを新しいインターフェースでラップする
  • Impedance match an old component to a new system
  • 以上を利用する方法と、継承を利用する方法の2種類ある。継承を利用する方は多重継承になる

どういうときに使う?

  • オブジェクト自体の動作が望みどおりであるものの,インターフェースが望みどおりでないとき
  • インターフェースの異なる2つのクラスを繋げたいとき

典型的な構成要素

  • Adaptee
  • Target
  • Adapter

コード

#include <iostream>
#include <string>
using namespace std;

class Adaptee{
public:
  Adaptee(string name){
    this->name = name;
  }
  void print(){
    cout << "The name is " << name;
  }
private:
  string name;
};

class Target{
public:
  virtual void printWithBracket() = 0;
};

class Adapter: public Target{
public:
  Adapter(string name){
    adaptee = new Adaptee(name);
  }
  void printWithBracket(){
    cout << "\"";
    adaptee->print();
    cout << "\"";
    cout << endl;
  }
private:
  Adaptee* adaptee;
};


int main(){
  Target *t = new Adapter("adapter");
  t->printWithBracket();
  return 0;
}