设计模式笔记(17)---中介者模式(行为型)

基于Active-HDL的HDL设计录入与仿真 作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&wvr=6&is_all=1 GitHub:github.com/saint-000 优快云: https://me.youkuaiyun.com/qq_4053... 阅读详情

Gof定义

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

动机

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

中介者模式的结构图:

2010-01-20_210319

代码实现:

/// <summary>
/// 抽象的中介者
/// </summary>
public abstract class Mediator
{
    public abstract void Send(string msg, Colleague colleague);
}
/// <summary>
/// 抽象的同事类
/// </summary>
public abstract class Colleague
{
    protected Mediator _mediator;
    public Colleague(Mediator mediator)
    {
        _mediator = mediator;
    }
}
/// <summary>
/// 具体的中介者对象
/// </summary>
public class ConcreteMediator : Mediator
{
    public ConcreteCollegue1 Colleague1 { get; set; }
    public ConcreteCollegue2 Colleague2 { get; set; }
    public override void Send(string msg, Colleague colleague)
    {
        if (colleague == Colleague1)
        {
            Colleague2.Notify(msg);
        }
        else
        {
            Colleague1.Notify(msg);
        }
    }
}
/// <summary>
/// 具体的同事类1
/// </summary>
public class ConcreteCollegue1:Colleague
{
    public ConcreteCollegue1(Mediator mediator)
        : base(mediator)
    {

    }

    public void Send(string msg)
    {
        _mediator.Send(msg,this);
    }
    public void Notify(string msg)
    {
        Console.WriteLine("通知同事1:"+msg);
    }
}
/// <summary>
/// 具体的同事类2
/// </summary>
public class ConcreteCollegue2:Colleague
{
    public ConcreteCollegue2(Mediator mediator)
        : base(mediator)
    {

    }

    public void Send(string msg)
    {
        _mediator.Send(msg,this);
    }
    public void Notify(string msg)
    {
        Console.WriteLine("通知同事2:"+msg);
    }
}
/// <summary>
/// 客户端调用
/// </summary>
class Program
{
    static void Main(string[] args)
    {
        ConcreteMediator cm = new ConcreteMediator();
        ConcreteCollegue1 cc1 = new ConcreteCollegue1(cm);
        ConcreteCollegue2 cc2 = new ConcreteCollegue2(cm);
        cm.Colleague1 = cc1;
        cm.Colleague2 = cc2;
        cc1.Send("看阿凡达了吗?");
        cc2.Send("呵呵,周末公司组织去看。");
    }
}

Mediator模式的几个要点

将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象互相关联”为“多个对象和一个中介者关联”,简化了系统的维护,抵御了可能的变化。
随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂。这时候可以对Mediator对象进行分解处理。
Façade模式是解耦系统外到系统内(单向)的对象关联关系;Mediator模式是解耦系统内各个对象之间(双向)的关联关系。

YOLO26引入ECA-Net的改进版变体:1D卷积在2026目标检测的极致压榨 摘要: 2026年发布的YOLO26通过移除DFL模块、支持无NMS推理等革新成为边缘计算新标杆。为进一步提升性能,研究聚焦轻量级通道注意力机制ECA-Net,其核心创新在于用1D卷积替代传统全连接层,仅需5个参数即可实现高效通道交互。数学分析表明,ECA模块在ResNet50上仅增加80个参数,却能带来2%以上的精度提升。这种"极致压榨"的设计理念与YOLO26的轻量化特性高度契合,为在几乎不增加计算开销的前提下提升模型性能提供了可行方案。技术验证显示,该组合在COCO数据集上实现了检测精度与推理效率的双 阅读详情

相关推荐

利用李雅普诺夫函数开发航天器姿态控制系统

本文基于李雅普诺夫函数控制方法,采用修正罗德里格斯参数(MRP)描述航天器姿态,设计了姿态控制律。通过构造能量型李雅普诺夫函数,推导出保证系统稳定的控制闭环方程,实现了航天器从初始状态到目标状态的稳定转换。针对MRP参数可能出现的奇异性问题,采用影子集进行规避。仿真实验包含两种模式:非追踪模式(目标状态为0)和追踪模式(目标为三角函数轨迹)。结果表明,该控制方法能够有效实现姿态稳定和轨迹跟踪,在短暂调整后即可精确跟随目标轨迹。控制律设计考虑了不同参考系间的转换,通过DCM矩阵处理目标角速度的坐标变换问题。

weixin_50227659的博客 1221

Java设计模式之行为型模式(中介者模式)

中介者模式(Mediator) 1、背景 类与类之间会产生直接的交互,这在实际的编码中是常见的,例如,A类调用B类的方法。我们常说的“对扩展开放,对修改关闭”原则就是要防止某处修改导致处处修改的情景,因为这样极不利于后期维护。当A类直接调用B类的方法时,A类对B类产生了直接的依赖关系:A类直接依赖B类的方法。当B类的方法发生修改时(例如B类方法的方法名发生改变,B...

239

Mac电脑用Latex论文排版3天速成5天实战de笔记

我后悔了,这五天竞赛搞得我视力都下降了...一个冲动的决定后成为数模竞赛论文写手,3天速成+5天时间=点亮攻克latex写论文技能💡关于Overleaf我是Mac,曾经按照大部分推荐的方式用TEXshop+vs code,但是把模板导入就开始报错。跟着少之又少的适配mac的教程(此时我已知道大概是走错路了)改了配置也无效。海鲜市场找佬改了半天,佬问我:一定要用VC吗?我说,那倒也不是。于是佬推荐我overleaf,三下五除二帮我挑配了环境,美汁汁收了我30块钱。

luwanjoyce的博客 2250

设计模式(17)-行为型-中介者模式(Mediator)

概述 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 适用性 1.一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。 3.想定制一个分布在多个类中的行为,而又不想生成太多...

jlins_you的专栏 197

Python计算时间差的方法

使用datetime模块是Python内置的方法,使用timedelta对象可以更精确地计算时间差,而使用dateutil库则提供了更为灵活和方便的操作方式。我们可以使用datetime模块中的datetime类来表示一个具体的日期和时间,并进行相应的运算。在Python中,我们经常需要计算日期和时间之间的差异,例如计算两个日期之间的天数、小时数、分钟数等。Python提供了多种方法来计算时间差,下面我们将介绍其中的几种常用方法,并附上相应的源代码。在上面的代码中,我们使用了dateutil库中的。

学习使你进步。 2086

【网络安全 | 渗透工具】密码字典生成工具crunch、cupp安装使用教程

Crunch是一个常用的密码破解工具,它可以根据指定的字符集、长度和模式生成各种可能的密码并进行暴力破解。同时,Crunch可以将生成的密码保存到文件中,以便在破解工具中使用。在进行渗透测试时,手动收集密码字典是十分耗时的,利用密码字典生成工具可以大幅缩短时间,提高爆破宽度。

等风来 8424

设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各个对象中。 对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系。虽然...

管子(zero)的杂乱空间 295

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 398

行为型模型 中介者模式

行为型模型 中介者模式     Mediator抽象中介者         中介者类的抽象父类。 concreteMediator         具体的中介者类。 Colleague         关联类的抽象父类。 concreteColleague         具体的关联类。 适用于:         用一个中介对象,封装一些列对象(同事)的交换,中介者...

weixin_33690367的博客 208

uniApp微信小程序:利用live-pusher人脸活体检测功能+完整示例代码,uniapp使用live-pusher直播推流组件实现人脸验证-活体检测,检测人脸中的动作包括眨眼、张嘴、左右摇头动作

UniApp 使用 live-pusher 实现人脸活体检测(附完整源码)uniapp开发微信小程序人脸检测活体检测,在uni-app的微信小程序项目中使用live-pusher实现人脸识别,uniapp使用live-pusher实现模拟人脸识别效果,张张嘴、眨眨眼、向左摇头、向右摇头等动作,免费使用人脸活体检测的插件方案,uniapp小程序怎么免费使用人脸活体,直播推流,UNIAPP微信小程序使用live-pusher实现人脸识别(拍照)功能,在uni-app项目中实现人脸识别,既使用uni-app中的l

✅ 精选推荐文章 3013

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

此时我们的卡顿优化基本完成了,我们应该要考虑内存是否会泄漏,如果大家不知道哪些需要回收可以用leakcanary和android profiler进行内存检测,看代码有没有内存泄漏。

龚礼鹏的博客 2547

【设计模式】—-(17)中介者模式(行为型)

中介者模式: 一、概念:       所谓中介者模式就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。      通过定义我们可以看出中介者主要是通过中介对象来封装对象之间的关系,使之各个对象在不需要知道其他对象的具体信息情况下通过中介者对象来与之通信。同时通过引用中介者对象来减少系统对象之间关系,提

你只管努力, 787

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C#面向对象设计模式纵横谈 学习笔记17 Mediator 中介者模式(行为型模式)

意图       用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显式相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。Mediator模式解决了一个问题,多个类相互引用相互,相互影响,这时候类的关系模型是复杂的,一个类对象的变化会导致其他类对象的变化,这种场景有点连锁反应的意思。下面有一段代码class CutMenuItem    {  

Lawrence的专栏 1502

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C#设计模式之17-中介者模式

中介者模式(Mediator Pattern) 中介者模式属于行为型模式,它包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散耦合。 当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化。 角色: 1、抽象中介者(Mediator): 定义统一的接口用于各同事角色之间的通信,其中主要方法是一个(或多个)事件方法...

比特飞 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[设计模式笔记]快速小结(三)---行为型模式1

三. 行为行模式 14. Chain Of Responsibility(职责链模式) 意图: 使多个对象都有机会处理请求, 从而避免请求的发送者和接收者之间的耦合关系. 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止. 结构: 图16 说明: 有多少开端, 就有多少条责任链. http://blog.youkuaiyun.com/bagboy_taob

cay22的专栏 1483

【设计模式从入门到精通】17-中介者模式

中介者模式 1、智能家庭管理问题 2、中介者模式 3、中介者模式解决智能家庭管理问题 4、中介者模式的注意事项和细节

VectorX's Blog 518

C#设计模式学习笔记:(17)中介者模式

本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7966240.html,记录一下学习过程以备后续查用。 一、引言 今天我们要讲行为型设计模式的第五个模式--中介者模式,先从名字上来看。中介者模式可以理解为在两个或多个对象中间增加一个“中间对象”,由增加 的“中间对象”协调它们之间的关系。中介者模式在现实生活中的例子很多,比...

rizon886的博客 311

【设计模式(17)】行为型模式之中介者模式

个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道 如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充 前言 相信很多人都对更换手机号有所顾虑,或者体验过了这种麻烦——通知每个人自己手机号变更了,亲友朋友同事上司全都得通知一遍,万一漏了,就失联了,甚至还得确保他们收到且更换了通讯录中你的号码 那么,我们能不能将手机号存在一个中介处,我们只需要告知中介处我们的新手机号。当有人想找我们的时候,他们也只需要询问中介就行了。 比如公司、班级、家庭的通讯录,自己手机号或者地址修改后,也同步修改一下就.

路远不知归 343

【设计模式系列17】中介者模式原理及其在JDK源码中的体现

中介者模式中用一个中介对象封装一系列的对象交互,从而使各个对象不需要显示的相互作用,达到松耦合的目的,使得维护更加容易。当某些对象之间的作用发生改变时,不会立刻影响其他的一些对象之间的作用,保证了对象之间的相互作用可以独立的变化。 中介者模式属于行为型模式,其核心思想是通过中介者对象解耦各层次对象的直接耦合,层次对象的对外依赖通信全部交由中介者转发。 为什么需要中介者模式 ====================================================================

澎湖Java架构师的博客 259

java设计模式学习笔记-17-中介者模式

中介者模式 public abstract class Mediator{ public abstract void register(String colleagueName,Colleague colleague); public abstract void getMessage(int stateChange,String colleague); public void sendMessage(); } public class ConcreteMedia

weixin0605的博客 184

【Java学习】Java设计模式——24种设计模式笔记整理

24种设计模式笔记整理,24种设计模式可以分为结构型模式、行为型模式和创造型模式

一棵灬大树的博客 2569

设计模式-笔记总结

设计模式概述(Design Patterns) 具体内容可访问:http://c.biancheng.net/view/1317.html 目录 设计模式概述(Design Patterns) 1、软件设计模式概述 2、GoF的23种设计模式 根据模式的目的来划分 根据模式的作用来划分 GOF的23种设计模式的功能 3、UML中的类图及类图之间的关系 4、开闭原则(Open Closed Principle) 5、里氏替换原则(Liskov Substitution Principle

Champion-Dai 816

【GeekBand】C++设计模式笔记17_Mediator_中介者模式

【GeekBand】C++设计模式笔记17_Mediator_中介者模式

qq_38154295的博客 612

设计模式学习笔记

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。创建型模式

Tian208的博客 619

《Android源码设计模式》读书笔记 (17) 第17章 中介者模式

前言 中介者模式面向的是多类对象 定义 定义:包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.将多对多相互作用转化为一对多的相互作用. 优点:可以对依赖关系的类进行解耦使逻辑结构清晰 使用场景:对象之间交互操作,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,来解决耦合问题. UML类图 Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口,一般以抽象类方式

qq_28690547的博客 708
上一篇: 设计模式笔记(16)---解释器模式(行为型)
下一篇: Lable和Literal控件的使用和区别
oec2003
博客等级 码龄20年 373粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值