Adapter パターン

デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。 前回の Iteratorからの続き。

次は Adapter…。

このように、既存クラスを修正することなく、異なるインタフェースを持たせるということが、Adapter パターンの役割である。

同じようなインターフェイスでアクセスするが元々の処理は違うものや別々のものにしたい、という際にに役に立つって事かな。確かに良くありますね、そういう事。結城さんの本だと例えとしてコンセントの形状は国によって違うけど「アダプター」があれば繋げられるという話が書いてあって、なるほどなと。

クラス図

Adapter

自分としての理解・疑問

  • メソッドの名前付けがかなり重要なのではないかと感じた
  • 本の中では意識的に「strong」→「paren」のような「強い」という名前と「括弧」という意味付けを変えている
  • API があるようなものを徐々に変更していくために使えるというのは納得
  • 本で紹介されている内容だと Book で出力をしているが、テストを入れる事考えると値を返してしまった方が良いと思ったので、以下のようにしている。
    public function showWithParen()
    {
        // 本来はechoで出力するが、テスト的な観点から値を返すように変更
        // echo '('.$this->string.')'."\n";
        return '('.$this->string.')';
    }
    public function showWithAster()
    {
        // 本来はechoで出力するが、テスト的な観点から値を返すように変更
        // echo '*'.$this->string.'*'."\n";
        return '*'.$this->string.'*';
    }

感想

これは重なっているだけで Class の使い方としてかなり素直な使いかたかなと感じた。

参考