中介者模式通过引入中介者对象集中管理组件交互,实现解耦。在Golang聊天室示例中,用户通过ChatServer发送消息,避免直接引用其他用户,降低耦合,提升可维护性。1. 中介者(ChatMediator)定义通信接口;2. 具体中介者(ChatServer)管理用户并转发消息;3. 同事类(User)通过中介者收发消息,不直接通信。该模式适用于聊天系统、UI联动等场景,但需防中介者过度膨胀。

在复杂系统中,多个对象之间直接通信会导致高度耦合,难以维护和扩展。Golang 中通过中介者模式(Mediator Pattern)可以有效解耦对象间的交互逻辑。该模式的核心思想是引入一个“中介者”对象,集中处理对象之间的通信,让各个组件不再相互引用,而是通过中介者进行消息传递。
中介者模式包含以下几个关键角色:
这种结构特别适用于如聊天室、UI组件联动、游戏对象交互等场景。
假设我们正在构建一个简单的多人聊天室,用户(User)不能直接向其他用户发送消息,必须通过聊天服务器(ChatServer)中转。这就是典型的中介者应用场景。
立即学习“go语言免费学习笔记(深入)”;
package main
// Mediator interface
type ChatMediator interface {
SendMessage(message string, user User)
}
// ConcreteMediator
type ChatServer struct {
users []User
}
func (c *ChatServer) AddUser(user User) {
c.users = append(c.users, user)
}
func (c *ChatServer) SendMessage(message string, sender User) {
for _, user := range c.users {
// 不向发送者自己转发消息
if user.GetName() != sender.GetName() {
user.Receive(message)
}
}
}
// Colleague interface
type User interface {
GetName() string
Send(message string)
Receive(message string)
}
// Concrete colleague
type ChatUser struct {
name string
mediator ChatMediator
}
func NewChatUser(name string, mediator ChatMediator) *ChatUser {
return &ChatUser{
name: name,
mediator: mediator,
}
}
func (u *ChatUser) GetName() string {
return u.name
}
func (u *ChatUser) Send(message string) {
println(u.name + " 发送消息: " + message)
u.mediator.SendMessage(message, u)
}
func (u *ChatUser) Receive(message string) {
println(u.name + " 收到消息: " + message)
}
// 示例使用
func main() {
server := &ChatServer{}
alice := NewChatUser("Alice", server)
bob := NewChatUser("Bob", server)
charlie := NewChatUser("Charlie", server)
server.AddUser(alice)
server.AddUser(bob)
server.AddUser(charlie)
alice.Send("大家好,我是 Alice!")
bob.Send("Hi,我是 Bob。")
}
运行结果会显示每个用户发送的消息被其他用户接收,但用户之间没有直接依赖。所有通信都由 ChatServer 统一调度。
使用中介者模式后,系统具备更高的灵活性和可维护性:
常见适用场景包括:
虽然中介者模式能解耦,但也可能带来新的问题:
在 Golang 中,可以通过 goroutine + channel 进一步增强中介者的并发处理能力。例如,将消息投递放入 goroutine 异步执行,避免阻塞发送方。
基本上就这些。中介者模式不是万能钥匙,但在需要集中控制交互逻辑的场景下,它能让代码更清晰、更易扩展。Golang 的简洁语法和接口设计让这种模式实现起来非常自然。
以上就是Golang如何实现中介者模式解耦对象交互_Golang 中介者模式应用实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号