Adapterパターンとは、異なるインターフェースを持つクラス同士を結びつけるためのデザインパターンだ。これにより、互換性のないクラスを簡単に一緒に使えるようにする。
たとえば、古いゲームコントローラーを新しいゲーム機で使いたい場合、このパターンが役立つ。
では、サンプルコードを一緒に見ていこう。
まず、古いオーディオ機器があって、それは「丸いプラグ」で音楽を再生するものだとしよう。この機器には
playMusicWithRoundPlug()
というメソッドを用意して、音楽を再生する処理を入れておこう。
// 古いタイプのオーディオ機器
class OldAudioPlayer {
playMusicWithRoundPlug() {
console.log("丸いプラグで音楽を再生しています...");
}
}
次に、新しいイヤホンが「四角いプラグ」で音楽を再生することを想定し、そのためのメソッド
useSquarePlug() を定義しよう。
// 新しいイヤホン
class SquareHeadphone {
useSquarePlug() {
console.log("四角いプラグで音楽を再生しています...");
}
}
ここで、古いオーディオ機器を新しいイヤホンで使えるようにするためのAdapterを作成する。このAdapterは、古い機器の
playMusicWithRoundPlug()
メソッドを呼び出すことで、新しいイヤホンで音楽を再生する。
// Adapter: 丸いプラグのオーディオ機器を四角いイヤホンに対応させる
class AudioAdapter {
constructor() {
this.oldPlayer = new OldAudioPlayer();
}
useSquarePlug() {
this.oldPlayer.playMusicWithRoundPlug();
}
}
最後に、Adapterを使って、古いオーディオ機器を四角いプラグのイヤホンで動作させよう。
// Adapterを使って新しいイヤホンを接続
const adapter = new AudioAdapter();
adapter.useSquarePlug(); // 結果: 丸いプラグで音楽を再生しています...
これでAdapterパターンの解説は終わりだ。
このパターンを使うと、互換性のないクラス同士をスムーズに結びつけることができ、既存のコードに手を加えることなく新しい機能を追加できる。