如何用Golang实现中介者模式优化对象交互_Golang 中介者模式实战案例


中介者模式通过引入中介者集中管理对象间交互,降低系统耦合度。在Golang中,利用接口和结构体组合可优雅实现该模式。以聊天室为例,用户仅持有中介者引用,发送消息时由中介者统一转发给其他用户,避免直接依赖。示例中ChatRoom作为中介者注册并分发消息,User专注于收发行为,实现解耦。优势包括组件独立、逻辑集中、易于扩展与测试,后续可优化为支持群组、异步处理和消息持久化。Golang的特性使该模式实现简洁高效。

如何用golang实现中介者模式优化对象交互_golang 中介者模式实战案例

在复杂的系统中,多个对象之间直接通信会导致代码高度耦合,难以维护。中介者模式通过引入一个“中介者”来封装对象间的交互逻辑,使对象不必显式地相互引用,从而降低系统的依赖关系。Golang 虽然没有类继承机制,但凭借接口和结构体组合,能非常优雅地实现中介者模式。

中介者模式的核心思想

中介者模式的核心是将原本分散在多个对象中的交互逻辑集中到一个中介者对象中。这样每个组件只需与中介者通信,无需了解其他组件的存在。

适用场景包括:

  • 多个对象之间存在复杂的调用关系
  • 对象之间互相持有引用,形成网状结构
  • 希望解耦组件,提升可测试性和可扩展性

实战案例:聊天室系统

我们以一个简单的聊天室为例,用户(User)不再直接发送消息给其他用户,而是通过聊天室(ChatRoom,作为中介者)进行转发。

定义中介者接口和具体中介者

先定义一个中介者接口,便于后续扩展:

mediator.go

type Mediator interface {
    SendMessage(message string, sender User)
}

实现具体的聊天室中介者:

chatroom.go

会译·对照式翻译 会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

会译·对照式翻译 79 查看详情 会译·对照式翻译
type ChatRoom struct {
    users map[string]User
}

func NewChatRoom() *ChatRoom {
    return &ChatRoom{
        users: make(map[string]User),
    }
}

func (c *ChatRoom) Register(user User) {
    c.users[user.GetName()] = user
}

func (c *ChatRoom) SendMessage(message string, sender User) {
    for _, user := range c.users {
        // 不发给自己
        if user.GetName() != sender.GetName() {
            user.Receive(message, sender.GetName())
        }
    }
}
定义用户组件

用户只持有对中介者的引用,不保存其他用户的信息:

user.go

type User struct {
    name     string
    mediator Mediator
}

func NewUser(name string, mediator Mediator) *User {
    return &User{
        name:     name,
        mediator: mediator,
    }
}

func (u *User) GetName() string {
    return u.name
}

func (u *User) Send(message string) {
    u.mediator.SendMessage(message, *u)
}

func (u *User) Receive(message, from string) {
    println(u.name + " received message from " + from + ": " + message)
}
使用示例

在 main 函数中组装并运行:

func main() {
    chatRoom := NewChatRoom()

    alice := NewUser("Alice", chatRoom)
    bob := NewUser("Bob", chatRoom)
    charlie := NewUser("Charlie", chatRoom)

    chatRoom.Register(alice)
    chatRoom.Register(bob)
    chatRoom.Register(charlie)

    alice.Send("Hi everyone!")   // Bob 和 Charlie 收到
    bob.Send("Hello Alice!")     // Alice 和 Charlie 收到
}

输出结果:

Bob received message from Alice: Hi everyone!
Charlie received message from Alice: Hi everyone!
Alice received message from Bob: Hello Alice!
Charlie received message from Bob: Hello Alice!

优势与优化建议

通过中介者模式,我们实现了以下改进:

  • 用户之间完全解耦,新增用户不影响现有逻辑
  • 消息分发逻辑集中在中介者中,易于统一处理(如日志、过滤、广播策略)
  • 便于单元测试,可以为 Mediator 提供模拟实现

进一步优化方向:

  • 支持群组消息:在 ChatRoom 中增加频道或房间管理
  • 异步消息处理:使用 channel 将消息投递异步化
  • 消息持久化:在中介者中集成存储逻辑

基本上就这些。Golang 的接口和结构体让中介者模式实现简洁清晰,适合用于解耦复杂交互系统。关键在于合理划分职责,把通信逻辑交给中介者,让组件专注自身业务。

以上就是如何用Golang实现中介者模式优化对象交互_Golang 中介者模式实战案例的详细内容,更多请关注其它相关文章!


# golang  # 钟祥门户网站建设  # 工程装修seo  # 营销型网站建设哪家安全  # 相关文章  # 只需  # 网状结构  # 象中  # 群组  # 为例  # 如何用  # 器中  # 聊天室  # 多个  # ai  # go  # seo竞价推广关键词  # 湘潭建设路街道网站  # 奎文区网站建设  # 高新区营销推广托管中心  # 珠海seo推广费用价格  # 莆田抖音关键词排名优化  # 沧州网站推广优化报价 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: MacBook Pro词典使用指南  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  性能与资源监视器快捷打开  多闪电脑版下载_多闪PC端模拟器使用  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  mysql怎么查询数据_mysql基础查询语句使用教程  Linux如何自动分析系统异常日志_Linux日志智能检测  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  我居然低估了 DeepSeek,这次更新它做到了这些!  b站网页版入口 哔哩哔哩官方网站直接进入  晓晓优选app支付宝绑定方法  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  解决CSS background 属性中 cover 关键字的常见误用  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  Git命令与VS Code UI操作的对应关系解析  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  php如何实现多域名共享session_php存储session到redis与跨域读取配置  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  外卖小程序对接第三方配送  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  德邦快递会员怎么开通  优化响应式标题底部边框:CSS实现技巧与最佳实践  Go Goroutine调度与并发执行深度解析  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  《万兴喵影》导出视频方法  《梦想世界:长风问剑录》药师一图流分享  《盗墓笔记手游》技能介绍  视频转蓝光m2ts格式  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  iPhone12是否要更新ios16  多闪APP官方下载安装入口_多闪最新版本获取入口  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  如何使用 composer 和 aop-php 实现 AOP 编程?  使用document.execCommand实现Web文本编辑器加粗/取消加粗  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  《海豚家》注销账号方法  VS Code如何设置默认配置  聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  使用VS Code作为你的个人知识管理系统  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  《爱笔思画x》涂色教程  铁路12306座位怎么选_12306官方选座操作方法  动漫之家观看全集库 动漫之家免费资源网地址 

 2025-11-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.