Mediatorパターンの解説

これでIteratorパターンの解説は終わりだ。

このパターンを使うと、コレクションの要素を簡単に順番に操作できるため、リストや配列の処理に非常に便利だ。

解説

Step 1: クラスを作って、誰かが話しかける仕組みを作る

例えば、クラスの中でみんながそれぞれ直接話をするのではなく、全員が「先生」を通して話すとしよう。それがMediatorパターンの基本的な考え方だ。


// 仲介者となるクラス(先生)
class Teacher {
  constructor() {
    this.students = [];
  }

  addStudent(student) {
    this.students.push(student);
    student.setTeacher(this); // 生徒に先生を教える
  }

  sendMessage(message, fromStudent) {
    console.log(`${fromStudent.name}からメッセージが来ました: ${message}`);
    this.students.forEach(student => {
      if (student !== fromStudent) {
        student.receiveMessage(message);
      }
    });
  }
}

// 生徒クラス
class Student {
  constructor(name) {
    this.name = name;
    this.teacher = null;
  }

  setTeacher(teacher) {
    this.teacher = teacher;
  }

  sendMessage(message) {
    if (this.teacher) {
      this.teacher.sendMessage(message, this);
    }
  }

  receiveMessage(message) {
    console.log(`${this.name}がメッセージを受け取りました: ${message}`);
  }
}
      

Step 2: クラスに生徒を追加し、メッセージを送る

クラスに生徒を追加して、各生徒が先生を通じて他の生徒にメッセージを送る仕組みを作ってみよう。


// 先生(仲介者)を作成
const teacher = new Teacher();

// 生徒を作成
const student1 = new Student("太郎");
const student2 = new Student("花子");
const student3 = new Student("次郎");

// 生徒を先生のクラスに追加
teacher.addStudent(student1);
teacher.addStudent(student2);
teacher.addStudent(student3);

// 太郎がメッセージを送る
student1.sendMessage("こんにちは!みんな元気?");

// 花子がメッセージを送る
student2.sendMessage("元気だよ、ありがとう!");

// 次郎がメッセージを送る
student3.sendMessage("僕も元気だよ!");
      

Step 3: 仲介者(先生)を通してのやりとりを確認

各生徒が直接他の生徒に話しかけるのではなく、先生を通してメッセージを送る仕組みができたね。これがMediatorパターンだ。各生徒は他の生徒に関与せず、メディエーター(ここでは先生)を介してメッセージをやり取りしているんだ。

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

これでMediatorパターンの解説は終わりだ。
このパターンを使うと、オブジェクト同士が直接やり取りするのではなく、仲介役を通じてやり取りできるため、依存関係が減り、システム全体が簡潔になる。