Adapterパターンの解説

Adapterパターンとは、異なるインターフェースを持つクラス同士を結びつけるためのデザインパターンだ。これにより、互換性のないクラスを簡単に一緒に使えるようにする。

たとえば、古いゲームコントローラーを新しいゲーム機で使いたい場合、このパターンが役立つ。

では、サンプルコードを一緒に見ていこう。

解説

Step 1: 古いオーディオ機器(丸いプラグ)を作る

まず、古いオーディオ機器があって、それは「丸いプラグ」で音楽を再生するものだとしよう。この機器には playMusicWithRoundPlug() というメソッドを用意して、音楽を再生する処理を入れておこう。


        // 古いタイプのオーディオ機器
        class OldAudioPlayer {
            playMusicWithRoundPlug() {
                console.log("丸いプラグで音楽を再生しています...");
            }
        }
      

Step 2: 最新のイヤホン(四角いプラグ)を使うためのインターフェイスを定義する

次に、新しいイヤホンが「四角いプラグ」で音楽を再生することを想定し、そのためのメソッド useSquarePlug() を定義しよう。


        // 新しいイヤホン
        class SquareHeadphone {
            useSquarePlug() {
                console.log("四角いプラグで音楽を再生しています...");
            }
        }
      

Step 3: Adapterを作る

ここで、古いオーディオ機器を新しいイヤホンで使えるようにするためのAdapterを作成する。このAdapterは、古い機器の playMusicWithRoundPlug() メソッドを呼び出すことで、新しいイヤホンで音楽を再生する。


        // Adapter: 丸いプラグのオーディオ機器を四角いイヤホンに対応させる
        class AudioAdapter {
            constructor() {
                this.oldPlayer = new OldAudioPlayer();
            }

            useSquarePlug() {
                this.oldPlayer.playMusicWithRoundPlug();
            }
        }
      

Step 4: Adapterを使う

最後に、Adapterを使って、古いオーディオ機器を四角いプラグのイヤホンで動作させよう。


        // Adapterを使って新しいイヤホンを接続
        const adapter = new AudioAdapter();
        adapter.useSquarePlug(); // 結果: 丸いプラグで音楽を再生しています...
      

Adapterパターンの重要なポイント

これでAdapterパターンの解説は終わりだ。
このパターンを使うと、互換性のないクラス同士をスムーズに結びつけることができ、既存のコードに手を加えることなく新しい機能を追加できる。