跳到主要内容

中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过一个中介对象来封装一系列对象之间的交互。中介者模式的目标是减少对象之间的直接通信,将复杂的相互关系转移到中介者对象上,从而降低对象之间的耦合度。

在中介者模式中,各个对象之间不再直接相互引用,而是通过中介者进行通信。这可以使系统更容易扩展,因为新对象的引入不会导致系统中所有对象的变化。

以下是一个简单的 JavaScript 示例:

// 中介者
class Mediator {
constructor() {
this.colleagues = [];
}

addColleague(colleague) {
this.colleagues.push(colleague);
}

sendMessage(colleague, message) {
this.colleagues.forEach(c => {
if (c !== colleague) {
c.receiveMessage(message);
}
});
}
}

// 同事(Colleague)基类
class Colleague {
constructor(mediator) {
this.mediator = mediator;
}

send(message) {
this.mediator.sendMessage(this, message);
}

receiveMessage(message) {
console.log(`${this.constructor.name} received message: ${message}`);
}
}

// 具体同事类
class ConcreteColleague1 extends Colleague {
constructor(mediator) {
super(mediator);
}

sendToAll(message) {
this.send(message);
}
}

class ConcreteColleague2 extends Colleague {
constructor(mediator) {
super(mediator);
}
}

// 客户端
const mediator = new Mediator();

const colleague1 = new ConcreteColleague1(mediator);
const colleague2 = new ConcreteColleague2(mediator);

mediator.addColleague(colleague1);
mediator.addColleague(colleague2);

colleague1.sendToAll('Hello, everyone!');

在这个例子中,Mediator 是中介者类,负责管理同事对象的通信。Colleague 是同事基类,包含一个中介者对象,通过中介者对象发送和接收消息。ConcreteColleague1ConcreteColleague2 是具体的同事类,它们实现了具体的业务逻辑。

在客户端代码中,创建了一个中介者对象和两个同事对象,并将同事对象添加到中介者中。通过中介者进行通信,同事对象之间不直接交互,而是通过中介者进行消息的发送和接收。这样,当需要增加新的同事对象时,不会影响到其他同事对象的代码,只需要与中介者交互即可。这提高了系统的可维护性和扩展性。