Go实现中介者模式的核心是通过接口+结构体组合+闭包,将对象间直接依赖转为对中介者接口的依赖;定义Mediator接口和同事结构体,同事持有中介者接口引用,通过Notify通信,中介者根据sender类型协调行为,避免循环引用,并注意职责边界、生命周期与并发安全。

用 Go 实现中介者模式,核心是把对象间的直接依赖转为对一个中介者接口的依赖,让对象只跟中介者通信,不互相引用。Go 没有类和继承,但靠接口 + 结构体组合 + 闭包,能干净地表达这一思想。
先设计一个通用的中介者接口,以及同事(Colleague)需实现的行为:
Notify(sender interface{}, event string, data interface{})
Mediator 实例,并在需要交互时调用其 Notify
sender 可以是具体类型指针(如 *Button),方便中介者做差异化处理例如做一个简单的 UI 组件协调器:
Button 和 TextBox 两个同事结构体,都嵌入一个 mediator Mediator 字段Button.Click() 不直接操作 TextBox,而是调用 m.mediator.Notify(m, "click", nil)
*Button,就调用 textBox.Clear() 或更新其内容Go 中也可用闭包替代结构体中介者,适合轻量场景:
立即学习“go语言免费学习笔记(深入)”;
type MediatorFunc func(sender interface{}, event string, data interface{})
mediator := func(s interface{}, e string, d interface{}) { ... }
中介者模式容易变成“上帝对象”,需主动约束:
Notify 前加简单字符串匹配或用 map[string]func(...) 分发,避免大 switch
Notify,中介者内部需自行同步(如加锁或用 channel 串行化)基本上就这些。Go 的中介者模式不靠语法糖,而靠清晰的责任划分和显式的依赖注入——把“谁通知谁”变成“谁告诉中介者,中介者决定怎么转达”。写起来不复杂,但容易忽略边界控制,反而加重耦合。
以上就是如何使用Golang实现中介者对象通信_使用Mediator Pattern协调对象的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号