中介者模式通过接口与组合实现模块间松耦合通信,各模块仅注册事件处理器到中介者,由中介者统一调度消息分发;同步调用直接执行回调,异步则通过channel传递事件,避免循环依赖且提升可维护性。

中介者模式在 Go 中不依赖类继承,而是通过接口抽象和组合实现松耦合的模块通信。核心是让各组件只与中介者交互,不直接相互调用。
定义中介者接口与具体实现
先用接口约定中介者行为,比如消息分发、状态同步等。实际中介者结构体持有对各参与模块的引用(通常为接口),但模块本身不持有彼此引用。
- 模块只需知道中介者接口,不关心谁处理消息
- 中介者内部可按类型断言或使用 map[string]any 区分不同模块实例
- 避免循环导入:中介者包可定义模块所需回调接口,由模块包实现
模块通过回调注册到中介者
每个模块(如 UserPanel、NotificationService、DataSync)初始化时向中介者注册自己的事件处理器。中介者保存这些回调函数,后续触发时统一调度。
- 注册方式常用 func() 或带参数的 func(event string, data interface{})
- 推荐用结构体字段绑定方法,便于传入模块自身状态(如 m.OnOrderCreated = p.handleOrder)
- 支持注销机制(如返回 unregister func())便于测试或热替换
用 Channel 或方法调用实现通信
Go 中有两种主流通信路径:同步调用和异步消息。前者适合简单协调(如“保存后刷新UI”),后者适合解耦和并发控制(如日志上报、通知推送)。
睿拓智能网站系统-网上商城1.0免费版软件大小:5M运行环境:asp+access本版本是永州睿拓信息专为电子商务入门级用户开发的网上电子商城系统,拥有产品发布,新闻发布,在线下单等全部功能,并且正式商用用户可在线提供多个模板更换,可实现一般网店交易所有功能,是中小企业和个人开展个人独立电子商务商城最佳的选择,以下为详细功能介绍:1.最新产品-提供最新产品发布管理修改,和最新产品订单查看2.推荐产
立即学习“go语言免费学习笔记(深入)”;
- 同步场景:中介者直接调用已注册的模块方法,顺序执行,易调试
- 异步场景:中介者将事件发到 channel,各模块起 goroutine 消费,需注意缓冲与关闭
- 避免在中介者里做耗时操作;复杂逻辑应交由模块自己处理
实战小例子:登录流程协调
假设 LoginModule、AuthModule、AnalyticsModule 需协作。中介者 LoginMediator 接收 LoginModule 的“登录成功”事件,依次通知 AuthModule 设置 token、AnalyticsModule 上报行为。
- LoginModule 只调用 mediator.Notify("login_success", user)
- 中介者内部用 map[string][]func(interface{}) 存储监听器
- 无需 import 其他模块包,仅依赖各自定义的接口或纯函数签名
基本上就这些。Go 的接口和组合天然适合中介者模式,关键不在语法技巧,而在划清责任边界——谁发起、谁响应、谁调度,都由中介者一张图说清。









