Skip to content

中介者/中间件模式(Mediator/Middleware Pattern)

中介者模式使组件可以通过一个中心点(中介者)相互交互。中介者不是直接相互交谈,而是接收请求并将其转发!在 JavaScript 中,中介者通常只不过是一个对象文字或一个函数。

您可以将此模式与空中交通管制员和飞行员之间的关系进行比较。飞行员不会直接相互交谈(这可能会导致相当混乱),而是与空中交通管制员交谈。空中交通管制员确保所有飞机都能收到安全飞行所需的信息,而不会撞到其他飞机。

尽管我们不希望在 JavaScript 中控制飞机,但我们经常必须处理对象之间的多向数据。如果有大量组件,组件之间的通信可能会变得相当混乱。

对象的请求由中介器处理,而不是让每个对象直接与其他对象通信,从而形成多对多关系。中介器处理该请求,并将其转发到需要的位置。

中介者模式的一个很好的用例是聊天室!聊天室中的用户不会直接相互交谈。相反,聊天室充当用户之间的中介。

代码实现:

typescript
//聊天室是一个中间件
class ChatRoom {
  logMessage(user: any, message: string) {
    const time = new Date();
    const sender = user.getName();

    console.log(`${time} [${sender}]: ${message}`);
  }
}

//用户模版
class User {
  constructor(public name: string, public chatroom: ChatRoom) {}

  getName() {
    return this.name;
  }

  send(message: string) {
    //发送信息的功能通过聊天室发送
    this.chatroom.logMessage(this, message);
  }
}

const chatroom = new ChatRoom();

const user1 = new User("John Doe-1", chatroom);
const user2 = new User("Jane Doe-2", chatroom);
user1.send("hi there");
user2.send("hi there");