これでIteratorパターンの解説は終わりだ。
このパターンを使うと、コレクションの要素を簡単に順番に操作できるため、リストや配列の処理に非常に便利だ。
例えば、クラスの中でみんながそれぞれ直接話をするのではなく、全員が「先生」を通して話すとしよう。それが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}`);
}
}
クラスに生徒を追加して、各生徒が先生を通じて他の生徒にメッセージを送る仕組みを作ってみよう。
// 先生(仲介者)を作成
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("僕も元気だよ!");
各生徒が直接他の生徒に話しかけるのではなく、先生を通してメッセージを送る仕組みができたね。これがMediatorパターンだ。各生徒は他の生徒に関与せず、メディエーター(ここでは先生)を介してメッセージをやり取りしているんだ。
これでMediatorパターンの解説は終わりだ。
このパターンを使うと、オブジェクト同士が直接やり取りするのではなく、仲介役を通じてやり取りできるため、依存関係が減り、システム全体が簡潔になる。