java模式之中介者模式

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

浅议Java设计模式的中介者模式


   一、引子

  中介在现实生活中并不陌生,满大街的房屋中介、良莠不齐的出国中介……。它们的存在是因为它们能给我们的生活带来一些便利:租房、买房用不着各个小区里瞎转;出国留学也不用不知所措。

  中介者模式在 程序设计中也起到了类似的作用。

   二、定义与结构

  GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。

  当然并不是所有的对象都需要加入“中介”对象。如果对象之间的关系原本一目了然,中介对象的加入便是“画蛇添足”。

  来看下中介者模式的组成部分吧。

  1) 抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。

  2) 具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。

  3) 同事(Colleague)角色:每一个同事角色都知道对应的具体中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。

  来自《 设计模式》一书的类图:


  由于中介者的行为与要使用的数据与具体业务紧密相关,抽象中介者角色提供一个能方便很多对象使用的接口是不太现实的。所以抽象中介者角色往往是不存在的,或者只是一个标示接口。如果有幸能够提炼出真正带有行为的抽象中介者角色,我想同事角色对具体中介者角色的选择也是策略的一种应用。

  “恰到好处,过犹不及”。适合自己系统的便是最好的。

   三、进一步讨论

  是否还记得应用广泛的MVC分为哪三层? 模型层(Model)、表现层(View)还有控制层(Control/Mediator)。控制层便是位于表现层与模型层之间的中介者。笼统地说MVC也算是中介者模式在框架设计中的一个应用。

  由于中介者模式在定义上比较松散,在结构上和观察者模式、命令模式十分相像;而应用目的又与结构模式“门面模式”有些相似。

  在结构上,中介者模式与观察者模式、命令模式都添加了中间对象——只是中介者去掉了后两者在行为上的方向。因此中介者的应用可以仿照后两者的例子去写。但是观察者模式、命令模式中的观察者、命令都是被客户所知的,具体哪个观察者、命令的应用都是由客户来指定的;而大多中介者角色对于客户程序却是透明的。当然造成这种区别的原因是由于它们要达到的目的不同。

  从目的上看,中介者模式与观察者模式、命令模式便没有了任何关系,倒是与前面讲过的门面模式有些相似。

  但是门面模式是介于客户程序与子系统之间的,而中介者模式是介于子系统与子系统之间的。这也注定了它们有很大的区别:门面模式是将原有的复杂逻辑提取到一个统一的接口,简化客户对逻辑的使用。它是被客户所感知的,而原有的复杂逻辑则被隐藏了起来。而中介者模式的加入并没有改变客户原有的使用习惯,它是隐藏在原有逻辑后面的,使得代码逻辑更加清晰可用。

  前面已经陆陆续续的将中介者模式的特点写了出来。这里再总结一下。使用中介者模式最大的好处就是将同事角色解耦。这带来了一系列的系统结构改善:提高了原有系统的可读性、简化原有系统的通信协议——将原有的多对多变为一对多、提高了代码的可复用性……

  但是中介者角色集中了太多的责任,所有有关的同事对象都要由它来控制。这不由得让我想起了简单工厂模式,但是由于中介者模式的特殊性——与业务逻辑密切相关,不能采用类似工厂方法模式的解决方法。因此建议在使用中介者模式的时候注意控制中介者角色的大小。

  讨论了这么多关于中介者模式的特点。可以总结出中介者模式的使用时机:一组对象以定义良好但是复杂的方式进行通信,产生了混乱的依赖关系,也导致对象难以复用。

   四、总结

  中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了“多对多”交互复杂的对象群,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。  
保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil) 本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。 阅读详情

相关推荐

AI大模型API中转站选型指南:12项关键指标与实战评估

随着AI大模型技术的快速迭代,企业面临着一个核心挑战:如何在基础模型频繁更新的背景下,为业务系统选择稳定可靠的API中转服务?本文基于真实生产环境测试数据,从12个关键维度系统评估主流API中转站平台,帮助技术团队在模型快速演进的生态中做出科学选型决策。 1. API中转站的核心价值与业务场景 1.1 什么是API中转站 API中转站(API Gateway/Aggregator)是连接业务系统与多个大模型厂商的中间层服务。它通过统一的接口封装了不同厂商的API协议差异,为企业提供标准化的模型调用能力。在实

weixin_29056101的博客 446

【23种设计模式】之中介者模式(Mediator Pattern) .Net Core实现

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 918

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

.NET 设计模式—中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。简单来说,就是用一个中介对象来封装一系列的对象交互,使各个对象不需要显式地互相引用,从而达到了减少耦合的目的,同时也能让它们之间交互独立地变化。

weixin_38747097的博客 363

普元EOS8.3精简版安装指南:从零开始搭建低代码开发环境

本文详细介绍了普元EOS8.3精简版的完整安装流程。从JDK1.8环境准备、MySQL数据库配置与初始化,到核心配置文件修改、服务启动与登录验证,提供了从零开始搭建低代码开发环境的清晰步骤和常见问题排坑指南,帮助开发者快速部署并体验平台核心功能。

ik678901的博客 1105

Docker一键部署NextCloud+OnlyOffice:打造企业级私有云办公环境(含HTTPS配置)

本文详细介绍了如何使用Docker Compose一键部署NextCloud与OnlyOffice,构建安全、高效的企业级私有云办公平台。内容涵盖从架构设计、Docker编排配置、HTTPS证书自动化管理,到系统初始化、性能优化及高级功能扩展的全栈实战指南,帮助企业实现数据自主可控与高效的在线文档编辑协作。

Apple的专栏 1240

在 ASP.NET Core 项目中使用 MediatR 实现中介者模式

一、前言时光小说网 www.youxs.org   最近有在看 DDD 的相关资料以及微软的 eShopOnContainers这个项目中基于 DDD 的架构设计,在Ordering这个示例服务中,可以看到各层之间的代码调用与我们之前传统的调用方式似乎差异很大,整个项目各个层之间的代码全部是通过注入 IMediator 进行调用的,F12 查看源码后可以看到该接口是属于Med...

爱无止 531

10位PWM能否满足电梯±5mm平层精度?4位扩展法让10位PWM达到14位精度

电梯平层精度直接关系乘坐舒适性与安全性,而PWM分辨率是决定精度的关键因素之一。10位PWM能否满足±5mm的平层精度要求?本文从分辨率与物理量的对应关系出发,结合工程精度需求与实战对比,给出明确的选型结论与解决方案,请参考优快云博客《4位扩展法:基于ATtiny816的高精度PWM软件扩展方法》和《低成本高精度PWM:4位扩展法原理、实现和工程实践》。10位PWM的分辨率为 $2^{10} = 1024$ 级。

m0_73354873的博客 244

浅议Java设计模式的中介者模式

一、引子   中介在现实生活中并不陌生,满大街的房屋中介、良莠不齐的出国中介……。它们的存在是因为它们能给我们的生活带来一些便利:租房、买房用不着各个小区里瞎转;出国留学也不用不知所措。 中介者模式在程序设计中也起到了类似的作用。  二、定义与结构  GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们

银狐的专栏 715

AI:Coze、Dify、n8n:三款低代码工具如何选?

Coze、Dify、n8n:三款低代码工具如何选?

Kant2048的博客 2806

杰理AC695N系列芯片 LED7数码管使用教程

杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。

qq_42014563的博客 1347

在.NET 8 中使用中介模式优雅处理多版本 API 请求

首先我们定义中介者和处理器的核心接口:data);data);data);在.NET 8 中使用中介模式处理多版本 API 请求,为我们提供了一种优雅、可扩展的解决方案。它不仅解决了 API 版本管理的核心问题,还带来了松耦合、易扩展、易维护等诸多优势。这种设计模式特别适合中大型 API 项目,能够有效应对业务需求的变化和系统的长期演进。通过集中化的中介者协调不同版本的交互,我们可以更专注于业务逻辑的实现,而不必过多关注版本间的依赖和兼容性处理。

temp0504的博客 921

YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 730

Java编程之中介者模式(Mediator Pattern)

摘要:中介者模式是一种行为型设计模式,通过中介对象协调多个组件间的通信,降低系统耦合度。以酒店前台为例,客人只需联系前台,由前台统一协调保洁、厨房、维修等部门,避免了直接交互的复杂性。UML结构图展示了中介者与各部门的星型关系,Java代码实现了酒店各部门通过前台中介的交互机制。该模式适用于GUI控件、聊天室等需要集中协调的场景,能有效简化对象间通信,提高系统灵活性和可维护性。

superfreeman的专栏 863

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

中介者模式定义了一个中介对象来封装一系列对象之间的交互。这种模式使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在中介者模式中,中介者负责处理对象间的通信和协作,对象间不再直接交互,而是通过中介者来间接通信。

shiming8879的博客 964

假人有限元模型

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

java中介者模式例子_Java中介者模式(Mediator Pattern)

本篇文章帮大家学习java中介者模式(Mediator Pattern),包含了Java中介者模式(Mediator Pattern)使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。中介者模式(Mediator Pattern)用于减少多个对象或类之间的通信复杂性。 此模式提供了一个中介类,它通常处理不同类之间的所有通信,并支持通过松散耦合来维护代码。中介者模式属于行为...

weixin_34600909的博客 201

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

小吕丶Code阶区 5061

JAVA中介者模式

JAVA中介者模式 1、前言 2、中介者模式的概念 3、中介模式的UML图 4、中介模式的实现 5、中介模式的优缺点以及使用的场景 6、总结 1、前言 中秋快乐,哈哈晚了一天说这句话!本来按道理我22号就应该把关于设计模式的博客写完。但是你知道的,我老是给自己放假。于是,中秋佳节,我就和我的小伙伴们打了三天撸。非常开心,感觉自己都活过来了!不过这个月还是要把设计模式的搞完嘞。 ...

帅哥威的博客 1817

Java设计模式 —— 【行为型模式】中介者模式(Mediator Pattern)详解

中介者模式是迪米特原则的经典体现:它要求一个对象应该对其他对象保持最少的了解。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

知唔猪的博客 1268

Java设计模式——中介者模式【Mediator Pattern】

Java设计模式、中介者模式、Mediator Pattern

scorpio的博客 392

Java设计模式之中介者模式

中介者模式通过引入一个中介者对象,来封装对象之间的交互,防止对象之间的直接通信,从而降低类与类之间的耦合性。中介者模式的核心思想是将系统的行为分散到独立的类中,通过中介者来协调这些行为。中介者模式通过引入一个中介者对象,使得各个同事类之间的通信更加松散耦合,从而提高系统的可维护性和扩展性。虽然中介者模式可以有效地减少对象之间的依赖性,但在实现过程中,可能会导致中介者对象变得过于复杂,因此在使用时需要谨慎考虑。

而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也! 1173

Java中介者模式(Mediator Pattern)

一、智能家庭项目 智能家庭项目: 智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等。 主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放。 传统的方式的问题分析 当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂 各个电器对象彼此联系,你中有我,我中有你,不利于松耦合. 各个电器对象之间所传递的消息(参数),容易混乱 当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性

weixin_44256581的博客 162

java中介者模式_Java中介者模式(Mediator Pattern)

全屏中介者模式(Mediator Pattern)用于减少多个对象或类之间的通信复杂性。 此模式提供了一个中介类,它通常处理不同类之间的所有通信,并支持通过松散耦合来维护代码。中介者模式属于行为模式类别。实现实例在这里通过一个聊天室的示例来演示中介者模式的使用,在聊天室中,多个用户可以向聊天室发送消息,并且聊天室的责任是向所有用户显示消息。在示例中创建了两个类ChatRoom和User。 用户对象...

weixin_36212543的博客 133

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

通过中介对象封装一组对象间的交互,将网状的对象关系转变为星型结构。如同机场控制塔协调所有飞机的起降,避免飞机之间直接通信导致的混乱。

季鸢的博客 2589

Java设计模式 二十一 中介者模式 (Mediator Pattern)

中介者模式通过引入中介者对象,减少了系统中各个同事类之间的直接依赖,简化了类与类之间的交互。它使得系统更加灵活,可维护性更高。虽然中介者模式提高了系统的可扩展性,但也可能导致中介者本身变得复杂,因此需要合理使用,尤其是在交互较为复杂的系统中。

空 774

【Java教程】Day20-17 设计模式:行为型模式——中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)是一种行为型设计模式,旨在通过引入一个中介对象来封装多个对象的交互。它的主要作用是减少各个对象之间的直接引用,从而降低系统的耦合度,并使得对象间的交互变得更加灵活和简洁。

max202011161630的博客 903
上一篇: java模式之单例模式
下一篇: Java中的DEM事件机制
dracularking
博客等级 码龄20年 1592粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值