设计模式---中介者模式

【Java设计模式】Java设计模式之(十)中介者模式(Mediator Pattern) 所有设计模式的代码实现例子都可在码云上查看哦,感兴趣的可以查看哈,码云地址:https://gitee.com/no8g/java-design-patterns 阅读详情

1.背景

在面向对象对象编程中,我们常提到要分离关注点;但当我们将代码重构为若干职责单一的类之后又发现类与类之间的调用关系或通信会变得复杂。

而设计模式中的“迪米特法则”又要求如果两个类之间没有必要直接通信那么他们之间就不应该产生直接的关联关系。由此我们可以想到可以在众多需要相互对象之间引入一个中间节点,来负责类与类之间的通讯转发。

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

2.Demo需求:

中介者模式让我想到了一个典型的案例就是Ethernet交换机。如果没有交换机网络上N个节点两两通讯,理论上需要N(N-1)/2个链接。但使用了交换机以后则仅需要N个链接,交换机就是一个典型的中介者。下面来写一段示意代码,来展示中介者模式

3.中介者模式实现Demo:

在这里插入图片描述
‘

class Switch:
    def __init__(self):
        self._devices=[]


    def forward(self,target_mac,msg):
        # 基于目的MAC转发
        for device in self._devices:
            if device.mac == target_mac:
                device.rcv_pkt(msg)


    def build_forward_table(self,*devices):
        self._devices = devices



class PC:
    def __init__(self,mac,switch):
        self.mac = mac
        self._sw = switch


    def send_pkt(self,target_mac,msg):
         print('PC Send %s to %s' % (msg,target_mac))
         self._sw.forward(target_mac, msg)

    def rcv_pkt(self,msg):
         print('PC Rcv Pkt: %s' % msg)


class SetTopBox:
    def __init__(self,mac,switch):
        self.mac = mac
        self._sw = switch

    def send_pkt(self, target_mac,msg):
        print('set_top_box Send %s to %s' % (msg,target_mac))
        self._sw.forword(target_mac, msg)

    def rcv_pkt(self, msg):
        print('set_top_box Rcv Pkt: %s' % msg)


class TV:
    def __init__(self,mac,switch):
        self.mac = mac
        self._sw = switch

    def send_pkt(self, target_mac,msg):
        print('TV Send %s to %s' % (msg,target_mac))
        self._sw.forword(target_mac,msg)



    def rcv_pkt(self, msg):
        print('TV Rcv Pkt: %s' % msg)


if __name__ == '__main__':

    zx_zxr10 = Switch()

    test_pc = PC('11-11-11-11-11-11',zx_zxr10)
    test_set_top_box = SetTopBox('22-22-22-22-22-22',zx_zxr10)
    test_tv = TV('33-33-33-33-33-33',zx_zxr10)



    zx_zxr10.build_forward_table(test_pc,test_set_top_box,test_tv)

    test_pc.send_pkt('33-33-33-33-33-33', 'PING')

’
执行结果:

/Users/hellfire/Documents/设计模式复习/venv/bin/python /Users/hellfire/Documents/设计模式复习/Mediator/mediator.py
PC Send PING to 33-33-33-33-33-33
TV Rcv Pkt: PING

Process finished with exit code 0

说明:

本例示意的交换机数据转发过程与实际还是有较大差异,但基本上能够体现“中介者”模式的核心:
Switch为中介者类,它通过目的Mac来转发链接在它上的网络设备的数据报文。而每个网络设备类:PC、TV、SetTopBox 只需要将报文递交给所依赖的switch对象负责报文处理,不需要与其它网络设备类形成耦合关系。

4.中介者模式缺陷:

在真实项目应用中,中介者可能会存在过于负责,职责过重的情况。

中介者模式Demo 立即下载

相关推荐

中介者模式demo

iOS 中介者模式的使用 开发模式的一些详细介绍 和中介者模式的详细使用demo

设计模式之【中介者模式】,多对多关系降级为一对多关系的利器

中介者模式(Mediator Pattern)又称为调节者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型模式。中介者模式的核心思想是,通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发。

秃了也弱了 4410

中介者模式(mediator)

NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1033405

设计模式之中介者模式详解

一般来说,类之间的关系是比较复杂的,多个类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,类之间直接关联的设计是不好的。...

glass__sky的博客 6716

工业级24V电源保护电路深度解析:五重防护机制详解

自恢复保险丝(PPTC,Positive Temperature Coefficient)是一种过流保护元件✅可恢复:过流后自动恢复,无需更换⚡响应快:电流超标立即动作🔄多次使用:在额定范围内可反复使用第1层(F1):阻挡过流 → 物理熔断第2层(D3):吸收浪涌 → 能量泄放第3层(Q1):防止反接 → 逻辑阻断第4层(Q2/Q3):抵御过压 → 主动切断第5层(CR):平滑启动 → 时序控制设计哲学:"让每一级保护专注做好一件事"通过这篇文章,我们深入理解了:✅自恢复保险丝。

qq_58068673的博客 3561

叶绿体基因组提交NCBI全流程避坑指南

叶绿体基因组作为环状细胞器DNA,其数据提交并非简单上传,而是需严格遵循INSDC标准的学术出版行为。其核心原理在于元数据完整性、拓扑结构语义一致性与分类学路径精确匹配;技术价值体现在保障序列可追溯、可复现、可互操作;典型应用场景涵盖植物系统发育、条形码开发及合成生物学底盘构建。实践中,FASTA头行格式、feature table嵌套规则、taxid绑定及BankIt静默校验等环节极易引发失败。本文聚焦NCBI|叶绿体基因组数据上传中的高频报错与隐性约束,提供面向生物信息工程师的实操级规范解析。

weixin_31960565的博客 318

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

中介者模式通过中介者对象来封装一系列的对象交互,将对象间复杂的关系网状结构变成结构简单的以中介者为核心的星形结构,对象间一对多的关联转变为一对一的关联,简化对象间的关系,便于理解;各个对象之间的关系被解耦,每个对象不再和它关联的对象直接发生相互作用,而是通过中介者对象来与关联的对象进行通讯,使得对象可以相对独立地使用,提高了对象的可复用和系统的可扩展性。在中介者模式中,中介者类处于核心地位,它封装了系统中所有对象类之间的关系,除了简化对象间的关系,还可以对对象间的交互进行进一步的控制。

张维鹏的博客 1万+

论文阅读 Quantum Convolutional neural network

在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。

m0_54373077的博客 2000

设计模式之中介者模式

中介者模式是一种行为设计模式,用于通过集中化处理对象之间的交互来减少对象之间的直接耦合。中介者模式通过引入一个中介者对象,使各个对象不再直接相互引用,而是通过中介者对象进行通信。这有助于降低系统的复杂性,并使对象之间的关系更加灵活。

qq_57748030的博客 861

计算机国际会议中的proceedings、conference、paper、workshop、demo:如何区分与选择?

本文详细解析了计算机国际会议中的核心概念:Conference(会议)是学术交流的主舞台,Paper(论文)是研究成果的书面呈现,被接收后收录于Proceedings(会议论文集)。Workshop(研讨会)聚焦前沿细分领域,Demo(演示)则侧重系统与工具的可交互展示。文章为研究者根据自身阶段与工作类型,如何区分与选择投稿目标提供了实用指南。

weixin_29269441的博客 562

解决fetch_california_housing数据集403错误的三种实用方法

本文针对机器学习初学者加载fetch_california_housing数据集时常见的HTTPError 403: Forbidden错误,提供了三种经过实测的解决方案。详细介绍了手动下载与本地替换、修改源码下载路径以及配置网络访问策略的具体步骤,帮助用户根据自身网络环境和开发场景选择最佳方法,确保数据集顺利加载。

weixin_29074295的博客 547

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

中介者模式,又被称为调停者模式,是一种行为型设计模式,其核心思想是通过引入一个中介对象来封装一系列对象之间的交互。这种模式使得各对象不需要显式地相互引用,从而降低了它们之间的耦合度和依赖性,使得系统更易于维护和扩展。中介者模式的主要角色包括:抽象中介者(Mediator):定义中介者接口,声明各种业务方法。具体中介者(Concrete Mediator):实现抽象中介者接口,负责与各个同事对象之间的通信和协调。

miaoyl的博客 1633

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5505

设计模式-中介者模式-Mediator Pattern

在聊天室系统中,用户之间的消息传递通过中介者模式来管理,这样可以避免用户之间的直接通信,简化了用户类之间的耦合,并使得通信策略的修改更加方便。:如果你希望在不同的上下文中重用组件,而这些组件在不同的环境中需要与其他不同的组件交互,中介者模式可以提供一种灵活的方式来适应不同的交互需求。当需要添加新的行为或功能时,可能需要对中介者进行大量的修改,这增加了系统的脆弱性。:如果组件之间的通信逻辑非常复杂,或者经常变化,将这些逻辑集中到中介者中可以简化组件的设计,使得组件不需要了解其他组件的内部实现。

wesigj的博客 1937

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 116

uniapp [安卓苹果App端] - 详细实现自定义水印相机功能,调用手机摄像头打开相机并在周围悬挂自定义水印,使用相机拍照后添加水印文字或样式,uniapp APP端水印相机完整源码,兼容强大可靠

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果app,水印相机,uniapp水印相机,Uniapp安卓app实现水印相机,uniapp苹果ios水印相机,打开系统相机拍照添加水印,地点打卡相机,水印相机(水印照片,图片加水印),uniapp自定义水印相机,制作水印相机给图片添加水印并且保存图片至本地,uniapp拍照图片加水印,水印相机功能,手机调起摄像头拍照时自动插入文字、图片动态水印效果,支持水印显示拍摄者当前城市定位、自由调整水印大小和位置,手机拍照时

🏆 前端领域优质创作者 1万+

23种设计模式中之中介者模式(Mediator Pattern)

本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

设计模式 20 中介者模式 Mediator Pattern

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装对象之间的交互,促进对象之间的解耦合。中介者模式的核心思想是引入一个中介者对象,将系统中对象之间复杂的交互关系集中管理,使得对象之间不直接相互通信,而是通过中介者进行通信,从而降低对象之间的耦合度,提高系统的可维护性和扩展性。在中介者模式中,中介者对象充当了协调者的角色,负责处理系统中各个相互关联对象之间的交互,对于系统其他对象来说,与中介者进行通信是唯一的接口。

jxusthusiwen的专栏 1192

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++设计模式——中介者模式(Mediator Pattern)

C++设计模式——中介者模式(Mediator Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——中介者模式(Mediator Pattern)目录引言定义代码示例总结参考资料 引言 假设现在科技发达之后,家里所有设备都是智能化的,而小明在家洗澡的时候有个习惯就是喜欢听歌,而且洗澡时候还要把窗帘拉上。因此就有这种情形,小明要拉窗帘可能就是要洗澡,当然也要听歌,因此我们希望小明家的洗浴设备,音响设备和窗帘设备都能协同合作,不管操作哪种设备,其他两种设备都有一定响应,以此写出程序。

leonardohaig的博客 1891

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

23种设计模式——中介者模式 (Mediator Pattern)详解

本文介绍了23种设计模式之——中介者模式 (Mediator Pattern)的说明及使用

Meteors.的博客 1193

设计模式-15中介者模式Mediator Pattern

中介者模式摘要 中介者模式是一种行为型设计模式,通过引入中介对象来封装一组对象间的复杂交互。该模式降低了对象间的直接耦合,使它们只需与中介者通信,而不必相互引用。中介者模式适用于对象间交互复杂且难以维护的场景,能集中控制交互逻辑并避免产生过多依赖关系。典型实现包含Mediator接口、具体中介者类和同事类结构,其中中介者负责协调同事对象间的通信,同事类则通过中介者发送和接收消息。这种模式广泛应用于聊天室、GUI组件交互等系统设计中。

d3y1`5 81_09 1003

【C#设计模式】17.中介者模式(Mediator Pattern)【行为型】

1.1 动机(Motivate) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断地变化。 在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。 1.2 意图(Intent) 定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。   .....

星Yeah 的博客 2333

设计模式(Design pattern)之中介者模式(Mediator Pattern)

摘要:该代码实现了中介者模式,通过中介者(Mediator)协调设备拥有者(Owner)和租赁者(Lessee)之间的通信。中介者抽象类定义核心方法,具体中介类(MediatorReal)维护双方引用并处理消息转发。同事类(Person)作为抽象基类,其子类Owner和Lessee通过中介者进行交互。客户代码演示了租赁场景:租赁者询问设备,拥有者回复报价,所有通信都通过中介者完成。该设计有效解耦了对象间的直接依赖,使系统更易于维护和扩展。

RR1335 之代码才是动力源 223

设计模式之---中介者模式(Mediator Design Pattern)

场景 买房租房找中介,男女相亲找中介。 用一个中介对象来封装一系列的对象交互。 中介者使各对象不需要显式地相互引用,从而使其韧合松散,而且可以独立地改变它们之间的交互。 简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加人一个‘中介’对象,使得两头的对象分别和‘中介’,对象引用或者依赖。

陌路旧梦 578

JAVA设计模式之 中介者模式【Mediator Pattern】

一、概述     用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。 二、适用场景     协调多个对象之间的交互。 三、UML类图 四、参与者 1、Mediator(抽象中介者):它定义一个接口,该接口用于与各同

小吕丶Code阶区 5061

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

设计模式 Java 中介者模式 Mediator

weixin_43438824的博客 693
上一篇: 设计模式---适配器模式(Adapter)
下一篇: 设计模式----装饰器模式
牛屁哄哄叫兽
博客等级 码龄18年 56粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值