当前位置: 首页 > news >正文

设计模式_中介者模式

中介者模式

介绍

设计模式定义案例问题堆积在哪里解决办法
中介者代替了多个对象之间的互动

使对象1 2 3 之间的互动
变为:
对象1->中介
对象2->中介
对象3->中介
好友之间
约饭
好友1 通知 好友2
-3
-4 等等
加一个群
谁想吃饭就
通知一下

类图

代码

角色

BasePeople        // 基类

FriendA

FriendB

FriendC               

FriendGroup        // 群

BasePeople       


public abstract class BasePeople
{public string name;public abstract void ReceiverMsg(string msg);public abstract void Send(string msg);
}

FriendA

using UnityEngine;public class FriendA : BasePeople
{FriendA() { }public FriendA(string name){this.name = name;}public override void ReceiverMsg(string msg){Debug.Log(name + "接收:" + msg);}public override void Send(string msg){Debug.Log(name + "发送:" + msg);FriendGroup.GetIns().SendAllPeopleMsg(name, msg);}
}

FriendB 类似A

FriendC类似A

FriendGroup 

using System.Collections.Generic;public class FriendGroup 
{//---------------------------------------------static FriendGroup self = null;private FriendGroup() { }public static  FriendGroup GetIns(){if (null == self){self = new FriendGroup();}return self;}//--------------------------------------------List<BasePeople> gruop = new List<BasePeople>();// 添加public void AddPeople(BasePeople friend){if (null == friend)return;gruop.Add(friend);}// 发送public void SendAllPeopleMsg(string senderName, string msg){foreach (var item in gruop){if (senderName != item.name){item.ReceiverMsg(msg);}}}}

测试代码
 

using UnityEngine;public class TestZJZ : MonoBehaviour
{void Start(){// 创建peopleBasePeople p1 = new FriendA("P1");BasePeople p2 = new FriendA("P2");BasePeople p3 = new FriendA("P3");// 创建群FriendGroup group = FriendGroup.GetIns();group.AddPeople(p1);group.AddPeople(p2);group.AddPeople(p3);p3.Send("晚上8点吃饭!");}
}

结果

总结

在 多对象之间互相通信 提炼出一个中介者 ,会让类图变得简单漂亮

相关文章:

设计模式_中介者模式

中介者模式 介绍 设计模式定义案例问题堆积在哪里解决办法中介者代替了多个对象之间的互动 使对象1 2 3 之间的互动 变为&#xff1a; 对象1->中介 对象2->中介 对象3->中介好友之间 约饭好友1 通知 好友2 -3 -4 等等加一个群 谁想吃饭就 通知一下 类图 代码 角色 …...

062:mapboxGL通过jumpTo方式跳转到某位置

第062个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中通过jumpTo方式跳转到某位置。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共122行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…...

学成在线第一天-课程内容管理服务搭建以及查询课程接口设计

目录 一、搭建课程内容管理服务 二、设计接口 三、面试题 四、总结 一、搭建课程内容管理服务 没什么好说的&#xff0c;直接就是创建内容模块 然后这个继承父模块&#xff0c;然后再课程内容模块下面创建三个子模块&#xff0c;model、sevice、controller model依赖base…...

4.7 IP多播

思维导图&#xff1a; **4.7.1 IP多播的基本概念** --- **1. 定义和背景** - IP多播&#xff1a;从一个源点发送信息至多个终点的技术。 - 1988年&#xff1a;Steve Deering首次提及IP多播。 - 1992年&#xff1a;IETF进行了首次IP多播试验&#xff0c;当时有20个网点参与。 …...

XML与html解析,区别,如何使用

目录 简介: HTML&#xff08;超文本标记语言&#xff09;&#xff1a; 如何使用HTML&#xff1a; XML&#xff08;可扩展标记语言&#xff09;&#xff1a; 如何使用XML&#xff1a; 区别&#xff1a; 简介: XML&#xff08;可扩展标记语言&#xff09;和 HTML&#xff…...

【广州华锐互动】利用VR开展建筑塔吊安全操作学习的好处?

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活带来了前所未有的便利。在工程教育领域&#xff0c;VR建筑塔吊安全操作学习作为一种新型的教学手段&#xff0c;正逐渐成为提高教学质量和培养高素质工程…...

分享一下怎么开发一个陪诊小程序

开发一个陪诊小程序需要综合考虑许多方面&#xff0c;包括但不限于市场需求、用户体验、技术实现和运营策略。以下是一篇以开发陪诊小程序为主题的文章。 一、背景介绍 随着社会的发展和人口老龄化的加剧&#xff0c;越来越多的老年人、病患和孕妇需要就医&#xff0c;而由于各…...

从一道面试题开始学习C++标准库提供的并发编程工具

一个空列表&#xff0c;用两个函数&#xff08;只可调用一次&#xff09;轮流写入值&#xff08;一个写奇数&#xff0c;一个写偶数&#xff09;&#xff0c; 最终实现列表的值为1-100&#xff0c;有序排列。 简单分析&#xff1a;假设这两个函数分别为A和B&#xff0c;A函数往…...

第三章 内存管理 十三、页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、时钟置换算法、改进型的时钟置换算法)

目录 一、定义 二、分类 1、最佳置换算法 / 最远置换算法&#xff08;OPT&#xff0c;Optimal): 1.1、定义&#xff1a; 1.2、例子&#xff1a; 2、先进先出置换算法(FIFO&#xff09;: 2.1、定义&#xff1a; 2.2、实现方法&#xff1a; 2.3、例子&#xff1a; 3、最…...

连接到EC2,开启root登录

1.启动完新实例&#xff0c;下载密钥对密钥对登录 ssh -i "ec2-user.pem" ec2-userec2-xx-xx-xx-xx.compute-1.amazonaws.com2.为root设置密码 sudo passwd root3.切换到root权限 su root4.修改ssh配置文件&#xff0c;允许密码登陆 vi /etc/ssh/sshd_config Pas…...

线性代数-Python-02:矩阵的基本运算 - 手写Matrix及numpy中的用法

文章目录 一、代码仓库二、矩阵的基本运算2.1 矩阵的加法2.2 矩阵的数量乘法2.3 矩阵和向量的乘法2.4 矩阵和矩阵的乘法2.5 矩阵的转置 三、手写Matrix代码Matrix.pymain_matrix.pymain_numpy_matrix.py 一、代码仓库 https://github.com/Chufeng-Jiang/Python-Linear-Algebra-…...

6.MySQL内置函数

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 日期函数 current_date() 当前日期 select 可以做表达式和函数的计算。 current_time() 当前时间 current_timestamp() 当前日期加时间 注意&#xff1a;值得说明的是这三个函数底层调用的都是同一个函数&#xff0c;只不…...

3dmax中导出模型到unity注意事项

从3dmax中导出 1. 注意单位&#xff0c;根据需要&#xff0c;选英寸还是选厘米 2. 不能导出有错误的骨骼&#xff0c;否则导入后模型网格里出现 Skinned Mesh Renderer &#xff0c;对网格变换移动有影响&#xff0c;正常情况下都应该是 Mesh Renderer 3. 导出一般不带光源和…...

QTday05(TCP的服务端客户端通信)

实现聊天室功能 服务端代码&#xff1a; pro文件需要导入 network 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer>//服务端 #include <QTcpSocket>//客户端 #include <QList> #include <QMes…...

【MATLAB源码-第52期】基于matlab的4用户DS-CDMA误码率仿真,对比不同信道以及不同扩频码。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. DS-CDMA系统 DS-CDMA (Direct Sequence Code Division Multiple Access) 是一种多址接入技术&#xff0c;其基本思想是使用伪随机码序列来调制发送信号。DS-CDMA的特点是所有用户在同一频率上同时发送和接收信息&#xf…...

Spring 路径与占位符

SpringMVC支持ant风格的路径 &#xff1f;&#xff1a;表示任意的单个字符 *&#xff1a;表示任意的0个或多个字符 \**&#xff1a;表示任意的一层或多层目录 注意&#xff1a;在使用**时&#xff0c;只能使用/**/xxx的方式 1.测试 &#xff1f; <a th:href"{/succe…...

MIT 6.824 -- Cache Consistency -- 11

MIT 6.824 -- Cache Consistency -- 11 引言严峻挑战锁服务缓存一致性问题案例演示优化 原子性问题故障恢复问题log内容故障恢复 小结 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集…...

Python在列表中如何对多个参数进行修改

1 问题 在python中经常会使用到列表&#xff0c;列表是常见的一种数据类型。对于一个庞大的列表&#xff0c;要调取列表中的对象&#xff0c;应如何快速准确的调取或快速的调取多个对象&#xff1f; 2 方法 解决问题的步骤采用如下方式&#xff1a; 基本的&#xff0c;已知元素…...

手机启用adb无线调试

具体步骤 手机和电脑处于同一个路由器下。 比如手机IP是192.168.31.181&#xff0c;电脑能ping通。 手机端启用无线adb调试先把手机用USB线连接电脑&#xff0c;打开adb&#xff0c;输入以下命令&#xff1a; G:\> adb tcpip 5555 restarting in TCP mode port: 5555 无…...

openGauss学习笔记-105 openGauss 数据库管理-管理用户及权限-默认权限机制

文章目录 openGauss学习笔记-105 openGauss 数据库管理-管理用户及权限-默认权限机制 openGauss学习笔记-105 openGauss 数据库管理-管理用户及权限-默认权限机制 数据库对象创建后&#xff0c;进行对象创建的用户就是该对象的所有者。openGauss安装后的默认情况下&#xff0c…...

GPU云定价新模型:特征定价(FBP)的经济学设计与实践

1. GPU云定价困境&#xff1a;当摩尔定律不再均衡现代GPU架构正在经历一场静默的经济危机。过去五十年间&#xff0c;摩尔定律不仅预测了处理器性能的指数级增长&#xff0c;也保证了每美元能买到的计算能力持续提升。但在今天的GPU领域&#xff0c;这个经济规律出现了戏剧性的…...

通义千问VL-Reranker-8B效果展示:短视频创作平台脚本+分镜+成片排序

通义千问VL-Reranker-8B效果展示&#xff1a;短视频创作平台脚本分镜成片排序 你是不是也遇到过这样的烦恼&#xff1f;在短视频创作平台上&#xff0c;面对海量的用户投稿——从文字脚本、分镜草图到最终成片——想快速找到最符合主题、质量最高的内容&#xff0c;简直像大海…...

别再死记硬背了!用Fluent做流体仿真,这5个核心参数设置对了才算入门

别再死记硬背了&#xff01;用Fluent做流体仿真&#xff0c;这5个核心参数设置对了才算入门 刚接触Fluent的工程师和学生常常会陷入一个误区&#xff1a;试图记住所有理论模型和参数的细节。但真实工程场景中&#xff0c;80%的仿真问题往往源于20%的关键参数设置不当。本文将聚…...

3分钟解锁QQ音乐加密格式:qmcdump音频解密终极指南

3分钟解锁QQ音乐加密格式&#xff1a;qmcdump音频解密终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾…...

从数据到洞察:使用Python自动化完成问卷量表的信效度评估与因子探索

1. 为什么需要自动化问卷分析&#xff1f; 做问卷研究的朋友应该都深有体会&#xff0c;每次收集完数据最头疼的就是各种统计检验。传统做法是用SPSS一个个点菜单&#xff0c;不仅效率低&#xff0c;还容易出错。我刚开始做研究时就经常遇到这种情况&#xff1a;好不容易跑完信…...

ComfyUI-SUPIR图像超分实战指南:从模糊到高清的完整解决方案

ComfyUI-SUPIR图像超分实战指南&#xff1a;从模糊到高清的完整解决方案 【免费下载链接】ComfyUI-SUPIR SUPIR upscaling wrapper for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-SUPIR ComfyUI-SUPIR是一款基于扩散模型的图像超分辨率插件&#xf…...

【限时开源】边缘Docker部署Checklist v3.2(含NVIDIA Jetson/树莓派/国产RK3588适配矩阵)

第一章&#xff1a;边缘Docker部署的核心挑战与演进趋势在资源受限、网络不稳、物理分散的边缘环境中&#xff0c;Docker 容器的部署远非云中心场景的简单平移。轻量化运行时、离线就绪能力、安全可信启动、异构硬件适配以及生命周期自治性&#xff0c;共同构成了边缘容器落地的…...

基于SpringBoot + Vue的甘肃特产销售系统

文章目录 前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S 四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论 五、项目代码参考六、数据库代码参考七、项目论文示例结语 前言 &#x1f49b;博主介绍&a…...

使用Python进行文件读写的API或方法及其注意事项

本文总结了Python文件读写的核心API及注意事项。主要内容包括&#xff1a;1&#xff09;文件打开与关闭方法&#xff0c;推荐使用with语句自动管理资源&#xff1b;2&#xff09;文件读取方法&#xff0c;如read()、readline()等&#xff0c;注意大文件应使用迭代器方式&#x…...

基于ESP32的磁吸轨道运输系统设计与实现

1. 项目概述&#xff1a;磁吸道路运输系统的设计初衷在模型铁路领域&#xff0c;TT比例&#xff08;1:120&#xff09;一直是个充满挑战的尺度。传统轨道系统需要复杂的布线&#xff0c;而道路车辆的控制更是难题。这个项目正是为了解决这些痛点而生——通过磁吸技术和ESP32控制…...