设计模式- 中介者模式(Mediator),设计模式详解,中介者模式(Mediator)

马肤

温馨提示:这篇文章已超过380天没有更新,请注意相关的内容是否还可用!

摘要:中介者模式是一种行为设计模式,旨在降低对象之间的耦合度。在这种模式中,中介者充当协调者,管理对象间的通信和交互。通过引入中介者,对象不再直接相互依赖,而是通过中介者传递消息或请求。这种模式有助于实现系统的灵活性和可维护性,特别是在处理复杂系统中的对象间交互时效果显著。

设计模式- 中介者模式(Mediator),设计模式详解,中介者模式(Mediator) 第1张

概念

中介者模式(Mediator Pattern)是一种对象行为型模式,该模式的主要目的是定义一个中介对象,以封装一系列对象之间的交互,使原有对象之间的耦合变得松散,并且可以独立地改变它们之间的交互。

原理结构图

抽象中介者(Mediator)这是中介者模式的核心接口,它定义了同事对象注册和信息转发的抽象方法,这个角色的主要职责是声明并规范中介者的操作,以便具体中介者能够实现这些操作来协调同事对象之间的交互。

具体中介者(Concrete Mediator)这个角色实现了抽象中介者接口,并具体定义了一个管理同事对象的列表,它负责协调各个同事角色之间的交互关系,因此依赖于同事角色。

抽象同事类(Colleague)这个角色定义了同事类的接口,它包含了保存中介者对象的方法和提供同事对象交互的抽象方法,这个角色的目的是实现所有相互影响的同事类的公共功能。

具体同事类(Concrete Colleague)这是抽象同事类的实现者,当具体同事类需要与其他同事对象交互时,它会通过中介者对象来进行后续的交互,而不是直接与其他同事对象通信。

代码示例

示例1:聊天室系统

在这个场景中,每个用户(客户端)都可以看作是一个同事类,而聊天室服务器则充当中介者的角色,用户之间不需要直接通信,而是通过服务器来转发消息。

示例2:智能家居系统

在智能家居系统中,中介者模式可以应用于管理各种智能设备之间的交互,这些设备可能包括灯光、空调、电视、窗帘等,每个设备都作为同事类,而智能家居中心或服务器则作为中介者,负责协调和管理设备之间的通信和交互。

优缺点

主要作用

降低对象之间的耦合性,并简化它们之间的通信。

优点

实现解耦合各个对象不再直接相互依赖,而只依赖于中介者,这显著降低了类之间的耦合性。

简化交互中介者模式简化了对象之间的交互过程,将复杂的交互逻辑封装在中介者内部,使得代码更加清晰和易于理解。

可扩展性中介者模式使得系统更加易于扩展,当需要添加新的对象或新的交互关系时,只需要修改中介者的代码,而无需修改其他对象的代码。

统一控制中介者实现了对交互关系的统一控制,确保交互的正确性和一致性。

缺点

中介者可能变得过于复杂随着系统中同事类数量的增加,中介者需要管理的交互关系也会变得更为复杂。

可能导致系统性能下降由于所有对象间的交互都需要通过中介者进行,当交互频繁或涉及大量数据时,中介者可能成为性能瓶颈。

降低了系统的透明度由于交互逻辑被封装在中介者内部,外部对象无法直接了解其他对象的交互细节。

对中介者的依赖性强同事类依赖于中介者进行交互,如果中介者出现问题,整个系统可能受到影响。

应用场景

应用场景

对象关系复杂当系统中的对象之间存在复杂的引用关系时,引入中介者可以简化这些关系。

行为变更频繁如果系统需要频繁地改变对象间的交互行为,可以通过增加新的中介者类来实现。

多人交互场景如多人聊天室,一个人发言需要传达给每个人时,使用中介者模式可以减少个体之间的直接交互。

系统解耦要求高在需要降低对象间直接依赖、提高系统模块独立性的情况下,中介者模式是一个很好的选择。

复杂系统设计对于复杂的系统如GUI系统、企业应用程序等,使用中介者模式可以使系统更易于维护和扩展,实际应用包括聊天室系统、微服务架构、智能家居系统、多人游戏等。

JDK中的使用:java.util.Timer 类

java.util.Timer 类中的中介者角色与同事类角色:Timer 类作为中介者角色负责注册任务(通过schedule方法)和取消任务的方法;TimerTask 或其他实现 Runnable 接口的类作为同事类角色负责定时执行的任务逻辑,Timer内部维护了一个任务队列并按照指定的时间间隔或延迟执行这些任务,同事类通过调用Timer类的schedule方法将自己注册到中介者中并指定执行的时间和周期一旦注册成功它们就不再需要直接与其他任务进行交互而是依赖于Timer中介者来管理和调度它们的执行,注意事项包括避免过度集中控制保持中介者的简洁性适时重构性能考量以及扩展性设计等,此外中介者模式与组合模式有所不同前者主要用于简化对象间复杂交互后者主要用于处理组合对象与单个对象的层次结构问题。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码