中介模式使组件能够通过一个中心点(中介)相互交互。各组件之间并不是直接交互,而是接收请求并将其转发!在JavaScript中,中介通常只是一个对象字面量或一个函数。
以航空公司的空中飞行管控为例,来解释mediator模式。假设,每架飞机相互之间都是自己直接沟通,整个沟通网络会非常繁杂而不好控制,可能会出现意外情况,后果将非常严重。那么,实际的飞行调度是通过AOC来完成,而AOC将相当于一个mediator的角色。
中介模式的一个很好的用例是聊天室!聊天室内的用户不会直接相互交谈。相反,聊天室充当了用户之间的中介。
class User {
constructor(name, chatroom) {
this.name = name;
this.chatroom = chatroom;
}
getName() {
return this.name;
}
send(message) {
this.chatroom.logMessage(this, message);
}
}
class ChatRoom {
logMessage(user, message) {
const time = new Date();
const sender = user.getName();
console.log(`${time} [${sender}]: ${message}`);
}
}
const chatroom = new ChatRoom();
const user1 = new User("张三", chatroom);
const user2 = new User("李四", chatroom);
user1.send("李四,好久不见!");
user2.send("阿三你好,是啊,最近比较忙哦!");
运行结果如下: