设计模式-中介模式

news/2024/12/26 5:26:54/

背景(与外观模式相似)

智能家庭中包括各种设备:闹钟、咖啡机、电视机、窗帘。

主人要看电视时,执行以下操作:闹钟响起-》咖啡机做咖啡-》窗帘自动落下-》电视开始播放

传统思路:

闹钟类接收命令,执行后调用咖啡机做咖啡,咖啡机类调用窗帘以此类推。

问题:

耦合度高,而且调用者并不知道具体的调用流程。

基本介绍

利用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互引用。

四个角色

①Mediator:抽象中介者类

②ConcreteMeditor:具体的中介类,聚合所有Collegue类,管理这些Colleague类

③Collegue:抽象同事类

④ConcreteCollegue:具体同事类,注意:在这个类声明具体对象时,会把自己加入对应Meditor类的Collegue集合中。

具体实现

创建抽象Meditor类,声明一个Collegue类数组。

声明一个GetMessage接收信息的抽象方法(核心方法)

创建ConcreteMeditor类具体实现这个抽象中介者类。

实现GetMessage方法,根据传入的信息,协调各个Collegue对象,执行具体操作。

创建抽象Colleague类,声明一个Mediator类,

声明构造方法(需要传入Meditor),将自己加入到对应Meditor的数组中。

声明一个可以在外部更改Meditor成员变量的方法。

声明一个SendMessage发送信息的抽象方法。

创建Alarm,CoffeeMachine等一系列具体同事类具体实现Colleague抽象父类。

在具体同事类中,实现SendMessage抽象方法,将需要传输的信息利用Meditor成员变量的GetMessage方法实现信息传输。

(信息可以是int,enum或者自定义的类)

在调用时,声明一个ConcreteMeditor类对象,

声明Alarm,CoffeeMachine等具体对象,利用ConcreteMeditor实现构造函数。

调用具体的同事类对象发出消息。

例如(让Alarm类发出闹钟响的消息,Alarm就会通过Meditor成员变量,执行预定好的后续一系列操作)


http://www.ppmy.cn/news/1558186.html

相关文章

Uniapp 手机基座调试App 打包成Apk文件,并上传到应用商店

1.Uniapp手机基座调试App。 1.1 以下是我另一篇文章 讲解 uniapp连接手机基座调试App、 Hbuildx使用SUB运行到手机基座测试_hbuilder基座-CSDN博客 2.打包本地的uniapp项目为apk文件。 打包的方式有很多种,我们可以选择本地打包和远程云端打包两种方式。 我们在打包…

SpringAI人工智能开发框架005---SpringAI文本转语音_语音转文本_音频翻译程序接口编写_英文音频翻译_中文音频翻译_指定模型

可以看到SpringAi中关于音频的API帮助文档可以去看一下. 可以看到帮助文档. 这部分功能就是把声音变成文本,以及把文本变成声音. 去创建一个项目 然后修改一下,仓库,引入 sring ai的仓库 然后指定一下版本,这里要用java 17的版本. 然后这里用的api-key 这个key, 这里配置到…

详解下c语言中struct和union的对齐规则

接触过c语言的同学应该都知道字节对齐。有些时候我们很容易弄错字节对齐的方式,特别是涉及到struct(结构体)和union(联合体)时。今天我们通过详细例子来说明下struct和union的对齐规则,以便了解各种struct和…

ffmpeg翻页转场动效的安装及使用

文章目录 前言一、背景二、选型分析2.1 ffmpeg自带的xfade滤镜2.2 ffmpeg使用GL Transition库2.3 xfade-easing项目三、安装3.1、安装依赖([参考](https://trac.ffmpeg.org/wiki/CompilationGuide/macOS#InstallingdependencieswithHomebrew))3.2、获取ffmpeg源码3.3、融合xf…

LeetCode每日三題(三

一、環形鏈表 自己答案: /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public boolean hasCycle(ListNode …

【ARM】MDK-编译时Linker Error:Internal fault

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录问题ARMCLANG: Linker Error: Internal fault: [0xb3b91b:6120001]的解决方案,以及添加原厂对于该问题的说明链接,为同事解决该问题提供参考。 2、 问题场景 客户在编译时linking中出现…

Go语言注释规范

Go语言注释规范 1.注释规范包注释文件注释结构体注释和接口注释函数和方法的注释代码逻辑注释 2.Goland注释相关配置包注释和文件注释配置Goanno插件 1.注释规范 包注释 包注释是对包的介绍,每个包都至少有一个包注释,在同一个包下,任一一个…

【文档搜索引擎】缓冲区优化和索引模块小结

开机之后,首次制作索引会非常慢,但后面就会快了 重启机器,第一次制作又会非常慢 这是为什么呢? 在 parserContent 里面,我们进行了一个读文件的操作 计算机读取文件,是一个开销比较大的操作, …