数码知识屋
霓虹主题四 · 更硬核的阅读氛围

中介者模式如何有效降低代码耦合

发布时间:2026-01-12 13:50:23 阅读:14 次

中介者模式如何有效降低代码耦合

在开发过程中,模块之间频繁交互是常态。比如一个聊天室应用里,用户A发消息要通知用户B、C、D,用户下线也要广播给所有人。如果每个用户对象都直接调用其他用户的处理方法,很快就会变成一张错综复杂的调用网。

这种“谁都要认识谁”的结构,一旦新增一个用户类型或修改通知逻辑,牵一发动全身。改一处,其他七八个类也得跟着动,测试成本飙升。这就是典型的高耦合问题。

中介者模式的思路

它不让人与人直接对话,而是引入一个“群聊管理员”——中介者。所有用户不再互相调用,而是把行为通知给中介者,由它统一调度。

比如用户上线,不再遍历其他用户执行onUserJoin,而是调用mediator.userJoined(this),由中介者内部决定后续动作。这样,用户类不需要持有其他用户实例,依赖关系从网状变成了星型。

一个简单的例子

class ChatMediator {
constructor() {
this.users = [];
}

addUser(user) {
this.users.push(user);
this.notifyUserJoined(user);
}

notifyUserJoined(newUser) {
this.users.forEach(user => {
if (user !== newUser) {
user.receive(`【系统】{newUser.name} 加入了聊天`);
}
});
}
}

class User {
constructor(name, mediator) {
this.name = name;
this.mediator = mediator;
}

join() {
this.mediator.addUser(this);
}

receive(message) {
console.log(`{this.name} 收到: {message}`);
}
}

可以看到,User 类不再需要知道其他用户的存在,所有交互通过mediator中转。新增一种机器人用户,只要让新类接入中介者即可,原有逻辑不动。

这就像公司里的部门协作。以前技术部要找产品要原型,得一个个打电话。现在统一走OA系统提交申请,流程清晰,人员变动也不影响流转。

在前端开发中,Vue 的事件总线、React 的状态管理工具,其实都有中介者思想的影子。组件不再直接通信,而是通过统一通道传递消息,大大降低了模块间的依赖强度。

当你的项目里出现大量对象相互引用、修改一个类要连带调整多个配套类时,不妨考虑引入中介者。它不能解决所有耦合问题,但在合适的场景下,确实能让代码变得更松、更稳、更容易扩展。