es6 语法学习 - 中介者模式
一、基本概念
中介者模式(Mediator Pattern)是一种行为型模式,它主要用于降低系统中对象之间的耦合度,通过引入一个中介者来封装对象之间的交互,使得对象之间的交互更加灵活和可扩展。
二、 优点
- 降低耦合性:对象之间不直接相互引用,而是通过中介者进行通信,降低了对象之间的依赖关系。
- 增强可维护性:聚合了对象之间的交互逻辑,使得系统的修改和维护更为简单。
- 集中控制:中介者可以控制对象之间的交互流程,为后续的功能扩展提供了便利。
- 易于拓展:可以通过添加新的同事类来扩展新的功能,而无需改变现有的代码结构。
三、缺点
- 中介者复杂性:随着系统扩展,中介者可能会变得复杂,承担过多的职责,导致难以维护。
- 潜在的性能问题:所有的通信都需要经过中介者,可能会影响系统性能,尤其是在高负载情况下。
四、使用场景
- 如多个组件需要协作完成某项任务时。
- 如果对象的数量和交互关系不固定,使用中介者可以灵活管理。
- 当对象间的通信变得繁杂时,中介者可以起到简化和优化的作用。
五、示例代码
以下是一个使用 ES6 语法实现中介者模式的例子,这个例子模拟了一个聊天室,其中多个用户可以通过一个中介者(聊天室)来发送和接收消息:
// 用户类
class User {
constructor(name, mediator) {
this.name = name;
this.mediator = mediator;
}
sendMessage(message) {
this.mediator.sendMessage(this, message);
}
receiveMessage(sender, message) {
console.log(`${sender.name} says to ${this.name}: ${message}`);
}
}
// 中介者(聊天室)类
class ChatRoom {
constructor() {
this.users = [];
}
registerUser(user) {
this.users.push(user);
user.mediator = this; // 确保用户知道它们的中介者
}
sendMessage(sender, message) {
this.users.forEach((user) => {
if (user !== sender) {
user.receiveMessage(sender, message);
}
});
}
}
// 使用中介者模式
const chatRoom = new ChatRoom();
const alice = new User('Alice', null); // 初始时,我们不直接传递中介者,而是在注册时设置
const bob = new User('Bob', null);
const charlie = new User('Charlie', null);
chatRoom.registerUser(alice);
chatRoom.registerUser(bob);
chatRoom.registerUser(charlie);
// 用户发送消息
alice.sendMessage('Hello everyone!');
bob.sendMessage('Hi Alice, how are you?');
charlie.sendMessage('What are we chatting about today?');