C++设计模式:中介者模式(十五)

1、定义与动机
  • 定义:用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各个对象不需要显示的相互引用(编译时依赖 -> 运行时依赖),从而使其耦合松散(管理变化),而且可以独立地运改变它们之间的交互。

  • 动机:

    • 在软件构建过程中,经常会出现多个对象相互关联交互的情况,对象之间常常会维持一种付啊的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。
    • 在这种情况下,我们可以使用一个“中介对象”来管理对象之间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化
  • 个人理解:中介者模式其实与现实生活中很相似,它更像一个黄牛,通过黄牛我们可能获取到一些通过自身很难获取到的资源。其主要的目的是为了解开相关联类之间依赖的耦合。

2、案例分析
class A{
private:
    Mediator* mediator;
};

class B{
private:
    Mediator* mediator;
};

class C{
private:
    Mediator* mediator;
};

class D{
private:
    Mediator* mediator;
};

class Mediator{
private:
    A* a;
    B* b;
    C* c;
    D* d;
};

在这里插入图片描述

  • 当存在多个类相互依赖或依赖对方的接口是可能会导致形成一种网状结构,这样设计并不合理。而转化为一种星型结构更加的松耦合。

  • 此时比较好的设计方式是通过中介者介入,每个类都与中介者双向关联,然后如果中介者去使用依赖对象的接口

3、总结
  • 将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象相互关联”为“多个对象和一个中介者关联”,简化了系统的维护,抵御了可能的变化
  • 随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂,这时候可以对Mediator对象进行分解处理。
  • Facade模式是解耦系统间(单项)的对象关联关系;Mediator模式三解耦系统内部各个对象之间的(双向)的关联关系
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/566593.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#带引导窗体的窗体设计方法:创建特殊窗体

目录 1.设计操作流程 2.实例 (1)Resources.Designer.cs (2)Frm_Main.Designer.cs (3)Frm_Main.cs (4)Frm_Start.Designer.cs (5)Frm_Start.cs &#…

HashData获得华为鲲鹏Validated认证 信创版图持续壮大

近日,经过一系列严格测试评估,酷克数据自研企业级HashData云数仓通过华为鲲鹏高阶调优认证,成功获得鲲鹏Validated技术认证书。 在本次Validated认证过程中,酷克数据携手北京鲲鹏联合创新中心,针对数据仓库的典型应用…

微信小程序实现支付功能——微信jsapi支付

微信小程序jsapi支付的实现涉及多个步骤,主要包括前端请求订单信息、后端处理订单并返回支付参数、前端调用jsapi进行支付等。以下是一个基本的实现流程: 1. 前端请求订单信息 在小程序中,当用户触发支付行为时(例如点击购买按钮…

Vue之v-on事件修饰符的含义及使用

背景:Vue 拆封了一个组件,在组件里面会使用一个方法来改变父组件传过来的值, 但是在子组件里面操作父组件的数据变更,实在比较麻烦(因为单向数据流), So 能不能直接在组件上面绑定事件方法呢&…

vue项目打包时因为图片问题报错

执行 npm run build命令打包项目时报错,看起来是图片的问题: package.json里面image-webpack-loader的版本是^7.0.1 解决方案: 1、先卸载 npm uninstall image-webpack-loader 2、用cnpm重新安装 cnpm install image-webpack-loader --save…

『FPGA通信接口』串行通信接口-IIC(2)EEPROM读写控制器

文章目录 1.EEPROM简介2.AT24C04简介3.逻辑框架设计4.随机读写时序5.仿真代码与仿真结果分析6.注意事项7.效果8.传送门 1.EEPROM简介 EEPROM (Electrically Erasable Programmable read only memory) 是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。在嵌入…

计算机视觉 CV 八股分享 [自用](更新中......)

目录 一、深度学习中解决过拟合方法 二、深度学习中解决欠拟合方法 三、梯度消失和梯度爆炸 解决梯度消失的方法 解决梯度爆炸的方法 四、神经网络权重初始化方法 五、梯度下降法 六、BatchNorm 七、归一化方法 八、卷积 九、池化 十、激活函数 十一、预训练 十二…

【Python-Pygame】

Python-Pygame ■ Pygame-简介■ Pygame-安装■ Pygame-Rect区域位置■ Pygame-Draw绘图函数■ Pygame-■ Pygame-■ Pygame-■ Pygame-事件监听■ Pygame-Event事件模块■ Pygame-游戏循环■ Pygame-Display显示模块■ Pygame-Time时间控制■ Pygame-Font文本和字体■ Pygame-…

2024企业数字化转型资料包(10G,1000+份,数字化转型有这份就够了!!!)

2022新时代数字政府建设与发展若干思考-119页.pptx 2023产业数字化建设方案-51页.pptx 2023人工智能与数字化转型的业财融合.pptx 2023企业数字化转型大数据湖一体化平台项目建设方案.pptx 2023供应链数字化转型顶层架构设计方案-37页.pptx 2023国企智改数转之道解决方案.pptx …

QT客户端开发的应用场景

QT 是一跨平台应用程序开发框架,支持多种操作系统,包括 Windows、macOS、Linux、Android、iOS 和嵌入式系统等。这使得 QT 非常适合开发需要在多种平台上运行的应用程序。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交…

花房短剧小程序视频怎么下载到本地#下载高手

本文就教你如何使用下载高手下载花房短剧小程序 本文用到的工具我已经给大家打包好了,有需要的自己取一下 链接:https://pan.baidu.com/s/1KtR6830x8GciKtNcSRhQMg?pwd1234 提取码:1234 --来自百度网盘超级会员V10的分享 1.首先退出微信,记得必须右…

【LeetCode刷题记录】21. 合并两个有序链表

21 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 …

AI大模型探索之路-资料篇:大模型开发相关地址信息收藏

文章目录 前言一、OpenAI大模型二、LangChain开发框架三、RAGA评估框架四、GLM大模型五、搜索服务1. Tavily Search API 六、文本LLM大模型七、多模态LLM模型八、模型排行榜1.大模型评测体系(司南OpenCompass)2.大模型排行榜(DataLearner AI&…

校园能源消耗监测管理系统,为您提供节能减排方案

现如今 ,在全球加快推动能源转型、减少碳排的背景下,节能减排已成为各行各业的共同诉求。作为最具示范效应的教育机构,学校在节能减排领域引领着重要的作用。 学效能源消耗监测管理系统是一套涵盖、教学楼、办公楼、图书馆、学生公寓、体育场…

SpringBoot+layuimini实现左侧菜单动态展示

layuimini左侧菜单动态显示 首先我们看一下layuimini的原有菜单显示格式 {"homeInfo": {"title": "首页","href": "page/welcome-2.html?t2"},"logoInfo": {"title": "LAYUI MINI","…

如何加盟共享wifi项目?了解套路有哪些?

自共享wifi项目推出在市场火爆后,各路资本都看到了该项目的广阔前景,纷纷开始研发程序,想要趁机分一杯羹。但对于普通人而言,独立研发程序显然不大现实,于是,共享wifi项目如何加盟便成为了绝大多数人最为关…

安卓手机如何改ip地址?探索方法与注意事项

在数字时代,IP地址成为了我们在线身份的重要标识。对于安卓手机用户而言,了解如何修改IP地址可能涉及多种场景,那么,如何安全、有效地进行这一操作呢?下面将为您提供相关方法,并探讨修改IP地址时的注意事项…

一句话或一张图讲清楚系列之——IDELAYE2的用法

主要参考: Xilinx IDELAYE2应用笔记及仿真实操-CSDN博客 xilinx原语介绍及仿真——IDELAYE2 & IDELAYCTRL_idelayctrl原语使用说明-CSDN博客 1 原理 IDELAYE2一般用于对输入lvds高速信号进行延时微调,可以把时钟和数据都单独微调;如果数…

OmniFocus Pro 4.2.1正式激活版 最好用的GTD效率工具

OmniFocus 是一款功能强大的任务管理软件,适合忙碌的专业人士。借助有助于平息混乱的工具,您可以在正确的时间专注于正确的任务。 OmniFocus Pro 4.2.1正式激活版下载 随时随地轻松创建任务,并通过项目、标签和日期进行整理。在任何设备上&am…

Python 基于docker部署的Mysql备份查询脚本

前言 此环境是基于docker部署的mysql,docker部署mysql可以参考如下链接: docker 部署服务案例-CSDN博客 颜色块文件 rootbogon:~ 2024-04-18 16:34:23# cat DefaultColor.py ######################################################################…