设计模式go语言实现----中介者模式mediator

多智能体协作不是多开Agent:中介者模式与通信契约的本质 多智能体系统(MAS)常被误认为是简单启动多个Agent实例,实则核心在于协作机制的设计。其底层原理依赖于明确的通信契约与角色分离,而非无序并发。中介者模式在此类系统中承担消息路由、意图仲裁、错误标准化和背压控制等关键职责,显著提升系统的可观测性、可调试性与弹性。OpenClaw与Hermes Agent分别以Orchestrator和Gateway为典型实现,前者面向分布式云环境强调协议标准化与技能编排,后者聚焦单机边缘场景提供操作系统级运行时保障。理解并落地通信契约——如结构化intent、异步消息生命 阅读详情

1 定义

中介者模式(Mediator): 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互

模式动机:
对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之称为一个松耦合的系统,这就是中介者模式的模式动机
UML类图:
在这里插入图片描述
中介者模式包含以下四个角色:

  • Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。
  • ConcreteMediator(具体中介者):它实现了接口,通过协调各个同事对象来实现协作行为,维持各个同事对象的引用
  • Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
  • ConcreteColleague(具体同事类):抽象同事类的子类,每一个同事对象需要和其他对象通信时,都需要先与中介者对象通信,通过中介者来间接完成与其他同事类的通信
    我们下面以联合国的例子进行说明,其UML类图如下:
    在这里插入图片描述

2 go语言实现

2.1 实现Mediator以及ConcreteMediator类

type UnitedNations interface {
	ForwardMessage(message string, country Country)
}

type UnitedNationsSecurityCouncil struct {
	USA
	Iraq
}

func (unsc UnitedNationsSecurityCouncil) ForwardMessage(message string, country Country) {
	switch country.(type) {
	case USA:
		unsc.Iraq.GetMessage(message)
	case Iraq:
		unsc.USA.GetMessage(message)
	default:
		fmt.Println("The country is not a member of UNSC")
	}

}

2.2 实现Colleague以及ConcreteColleague类

type Country interface {
	SendMessage(message string)
	GetMessage(message string)
}
type USA struct {
	UnitedNations
}

func (usa USA) SendMessage(message string) {
	usa.UnitedNations.ForwardMessage(message, usa)
}

func (usa USA) GetMessage(message string) {
	fmt.Printf("美国收到对方消息: %s\n", message)
}

type Iraq struct {
	UnitedNations
}

func (iraq Iraq) SendMessage(message string) {
	iraq.UnitedNations.ForwardMessage(message, iraq)
}

func (iraq Iraq) GetMessage(message string) {
	fmt.Printf("伊拉克收到对方消息: %s\n", message)
}

2.3 客户端调用

func main() {
	//创建一个具体中介者
	tMediator := mediator.UnitedNationsSecurityCouncil{}
	//创建具体同事,并且让他认识中介者
	tColleageA := mediator.USA{
		UnitedNations: tMediator,
	}
	tColleageB := mediator.Iraq{
		UnitedNations: tMediator,
	}
	//让中介者认识每一个具体同事
	tMediator.USA = tColleageA
	tMediator.Iraq = tColleageB
	//A同事发送消息
	tColleageA.SendMessage("停止核武器研发,否则发动战争")
	tColleageB.SendMessage("我们没有研发核武器,也不怕战争")
}
【愚公系列】二十三种设计模式(十七)-中介者模式(Mediator Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

相关推荐

【智能体】零代码实战:Coze多智能体协作开发全流程解析

本文详细解析了Coze平台的多智能体协作开发全流程,从入门指南到实战技巧,帮助用户零代码构建高效AI团队。通过模块化设计和专业分工,多智能体系统能显著提升任务处理速度和准确率,适用于客服、内容创作、教育培训等多个场景。文章还提供了性能优化和常见问题解决方案,助力开发者快速掌握Multi-Agent技术。

weixin_29239279的博客 334

golang 中介者模式

golang 中介者模式 文章目录golang 中介者模式前言一、中介者模式是什么?二、示例1. channel 版本2.slice 版本总结 前言 一、中介者模式是什么? 中介者模式是一种行为设计模式,能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作,将网状依赖变为星状依赖。 中介者能使得程序更易于修改和扩展,而且能更方便地对独立的组件进行复用,因为它们不再依赖于很多其他的类。 中介者模式与观察者模式之间的区别是,中介者模式解决的是同类或者不同类

qq_40500045的博客 517

避开地图定位的坑:手把手教你处理GCJ-02和WGS-84坐标转换(2023最新版)

本文深入解析了GCJ-02与WGS-84坐标系转换的核心原理与常见误区,提供了详细的代码实现与精度控制方法。针对地图定位开发中的实际痛点,文章重点阐述了如何通过迭代逼近法实现高精度坐标转换,并给出了误差测试与业务场景下的工程实践指南,帮助开发者有效规避定位漂移等问题。

lstm7chronicler的博客 1167

golang设计模式——中介模式

中介者模式算是聚而歼之的模式,因为从分而治之上讲,对应的操作应该让每一个Colleague自行管理,但这样做,Colleague之间需要相互了解,沟通成本太高。如果收拢到Mediator,整体效率会高很多,但Mediator存在成为上帝类的可能,反而导致不好维护。这是不是特别像实际生活。所以说世上的处理方案没有定法,能够更好的解决问题就是最好的。共勉。

qq_53267860的博客 393

ARM SMMUv3设备树配置实战:从零开始为RK3588搭建IOMMU环境

本文详细介绍了在RK3588平台上配置ARM SMMUv3设备树的实战经验。从理解硬件架构、设备树节点定义,到内核驱动集成与调试,提供了完整的IOMMU环境搭建指南,并分享了解决StreamID冲突、中断配置等常见问题的技巧,帮助开发者高效完成控制器初始化。

l3m4n的博客 883

PVE 8.0 保姆级换源教程:从Debian到LXC仓库,一次搞定国内镜像(附弹窗去除)

本文提供PVE 8.0保姆级换源教程,涵盖从Debian基础源到LXC仓库的国内镜像配置,并附赠去除订阅弹窗的实用技巧。通过详细步骤和命令示例,帮助用户快速优化ProxmoxVE环境,提升下载速度并消除干扰提示,适用于虚拟化平台的高效管理。

weixin_33282146的博客 412

Go设计模式--中介者,最后的模式!

大家好,这里是每周都在陪你一起进步的网管~!今天继续学习设计模式,也是我们要学习的最后一个设计模式—中介者模式,对这个模式有一点了解后会觉得它跟我们已经学过的观察者模式挺像,但是两者还是有些区别的,使用场景也不一样,具体我们放在最后再讲,先来一起学习中介者模式。中介者模式是一种行为设计模式, 能让程序减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行...

kevin_tech的博客,微信搜「网管叨bi叨」 529

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

Golang学习笔记_48——中介者模式

中介者模式是一种行为型设计模式,通过引入中介对象来封装一组对象间的交互,实现对象间解耦。交互中心化:所有对象通信通过中介者进行解耦网络:消除对象间的直接依赖关系动态协调:可随时调整交互规则而不影响对象。

LuckyLay的博客 1110

STM32入门教程:智能马桶盖控制

通过编写相应的代码,您可以根据需要实现其他功能,例如座圈温度调节和液晶显示屏显示等。初始化配置 首先,使用STM32CubeMX创建一个新的工程,并选择您所使用的STM32单片机型号。智能马桶盖是一种集成了多种功能的智能家居设备,通过控制芯片来实现自动冲水、座圈加热、座圈温度调节等功能。在本教程中,我们将使用STM32系列单片机来控制智能马桶盖的各个功能。以上代码演示了如何通过STM32的GPIO控制引脚来控制智能马桶盖的冲水和座圈加热功能。写代码 接下来,我们将通过编写代码来控制智能马桶盖的各个功能。

2401_85258012的博客 657

华为MetaERP国资委语境下的 DRP(全域数字化资源管理平台/Digitalized Resource-management Platform)与传统 ERP(以 SAP、Oracle 为代表)的

【摘要】国资委推动的DRP(全域数字化资源管理平台)正在重构央国企数智化转型路径,其本质是通过"ERP管交易+DRP管管控"的双层架构实现升维替代。与传统ERP相比,DRP具有三大突破:采用国产分布式数据库实现全级次穿透监管、构建数据中台打破信息孤岛、以实时分析替代事后报表。当前政策明确2026-2030年分阶段建设目标,这将重塑产业格局——倒逼传统ERP厂商转型,为云原生/AI/信创企业创造新机遇。需注意DRP并非简单替代ERP,而是通过治理模式变革实现"交易系统做薄、管控中

金牌架构师 286

Go Mediator中介者模式

Mediator 中介者 动机(Motivation) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好的抵御变化。 模式变化 用一个中介对象来封装(封装变化)一系列的对象交互。...

justinsun221的博客 261

课堂练习及课后作业2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?本关任务:修改版本 0 内核,使得每发生 100 次时钟中断,就在屏幕上输出一个字符‘t’和当时的进程号,如“t(0)”表示0号进程运行时发生了时钟中断。本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?本关任务:修改版本 1 内核源码,使得每次时钟中断发生时,都在屏幕上输出字符‘t’。分析版本1内核,找到第一次时钟中断的恢复点地址。

Junds0的博客 1万+

go-patterns责任链与中介者模式实战:解耦请求处理与组件通信的2个技巧

Go 设计模式库 go-patterns 提供了经典设计模式最易读的 Go 语言实现。本文挑选其中两个行为型模式——**责任链模式**与**中介者模式**,带你掌握 2 个实战技巧:用处理者责任链解耦请求处理,用中介者对象解耦组件之间的通信。无论是做中间件开发还是多模块协作系统,这 2 个技巧都能让你的 Go 代码告别面条式耦合。 [![Go设计模式图解:责任链与中介者模式如何解耦请求处理与组件

gitblog_00775的博客 944

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【设计模式】21、mediator 中介者模式

作为中介者, 协调各对象

呆呆的猫的博客 417

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

设计模式——Go语言(Golang)版:19_中介模式

示例代码: package main import ( "fmt" "strings" ) type CDDriver struct { Data string } func (c *CDDriver) ReadData() { //c.Data = "音乐、图片" fmt.Println("CD驱动器正在读取:", c.Data) } type CPUDriver struct { Video string Sound string } func (c *CPUDriver)

weixin_42117918的博客 387

设计模式--中介者(Mediator)模式

模式定义 用一个中介对象来封装(封装变化)一系列的对象交互,中介者使各对象不需要显示的相互引用,从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互 类图 应用场景 当多个对象互相关联交互并存在复杂的引用关系时,且对新需求需要进行大量更改时使用中介者模式解耦合 优点 可以避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化 要点总结 要点总结 将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象互相关联”为“多个对象和一个中介者关联”,简化

weixin_38299404的博客 534

大话设计模式 -- Golang实现

DesignPatternUse GO language to achieve 23 design patterns 该项目是拜读《大话设计模式》后,学习Golang语言实现的,有很多不足之处,有待完善 有些模式是根据UML图编写的基本框架,有些是基于特定的环境下编写的实例创建型模式 Abstract Factory抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的

aa779025105的专栏 7878

Go项目实战选型:如何用go-patterns为项目挑选最合适的24个设计模式

go-patterns 是一个专注于 **Go 语言设计模式**的开源参考实现库,用清晰的接口和单元测试完整演示了 **24 个经典设计模式**,按创建型、结构型、行为型三大类组织。无论你是刚学 Go 的新手,还是需要为项目做设计模式选型的工程师,都可以把它当作一份"模式字典",直接对照场景挑选最合适的模式。 [![Go设计模式实现:go-patterns项目吉祥物Gopher拼图](https

gitblog_01083的博客 210

23种设计模式(超级简洁)

-By Jason McDonald 关于设计模式   这个设计模式参考提供四人帮23种模式的快速参考,像原书《设计模式-可复用面向对象基础》中所陈述的,每个模式包括,类图,解释,使用说明和实际例子。   创建模式:用来构建对象以便能从实现系统解耦。 结构模式:用不同的对象组成大规模的对象结构。 行为模式:用来在对象中管理算法,关系,和责任。   对

wangshfa的专栏 810

谱熵角色编码革新软件设计模式检测

设计模式检测是软件工程中的关键技术,用于识别代码中重复出现的解决方案模板。传统方法依赖静态结构或动态行为分析,存在结构-行为割裂、语义模糊等局限。谱熵角色编码创新性地引入物理学谱分析原理,通过计算代码结构的频谱指纹来量化功能角色,结合双流Transformer架构实现92%的检测准确率。这种拓扑感知的数学方法具有语言无关性和尺度不变性,特别适合解决策略模式与状态模式等行为模式的区分难题,在金融系统重构等场景中已实现35%的效率提升。

weixin_30561425的博客 498

应用程序开发模式:模式的选择与组合——模式间的协作、冲突与权衡

文档分别解析了创建型模式(对象怎么造)、结构型模式(对象怎么组)、行为型模式(对象怎么交互)和架构模式全景(从单体到 Serverless)。但知道 23 种 GoF 模式和 15+ 种架构模式只是"知"的层面——真正决定系统质量的,是"行":在什么场景下选择什么模式、模式之间如何协作、模式之间何时冲突、何时该用模式何时该不用。

lza_csdn2019的博客 397

大型CAx(CAD/CAE/CAPP/CAM)工业软件开发中的关键组件

通过对FreeCAD、SALOME等多款代码的分析研究,发现这些软件在架构设计、模块实现等方面,存在许多相似(同)的技术思想。因此,有必要对这些共性、主流的技术予以总结分析。

国产CAx(CAD/CAE/CAM)软件研发 1万+

Golang中介者设计模式(十七)

github:https://github.com/zhumengyifang/GolangDesignPatterns 上一篇:https://blog.youkuaiyun.com/weixin_40165163/article/details/90968990 中介者模式 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持送耦合,是代码...

王佳宇的个人博客 6408

中介者模式 Go语言实现

对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系。虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象间相互连接的激增又会降低其可复用性,大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,而且对系统的行为进行任何较大的改动都会十分困难。结果是

readen的专栏 1040

【寒江雪】Go实现中介者模式

Mediator Pattern   中介者模式定义一个中介对象来封装系列对象之间的交互。各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变它们之间的交互。 实现   说起中介,就想到买房。 package mediator import ( "fmt" "gopkg.in/mgo.v2/bson" ) type Mediator interf...

寒江雪的博客 827
上一篇: 设计模式go语言实现----命令模式command
下一篇: 设计模式go语言实现----观察者模式Observer
cloudUncle
博客等级 码龄8年 21粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值