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

news/2024/9/22 19:58:56/
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模式三解耦系统内部各个对象之间的(双向)的关联关系
    在这里插入图片描述

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

相关文章

Docker 入门篇(二)-- Linux 环境离线安装

引言 docker 系列文章: Docker 入门篇(一)-- 简介与安装教程(Windows和Linux) 一、安装环境准备 centos :CentOS Linux release 7.6.1810 (Core)docker 版本:docker-26.1.0.tgz 官网下载地址…

linux笔记4--shell命令1

文章目录 一. 目录1.说明2.盘符3.linux根目录(以Ubuntu为例)①说明②根目录下一些文件夹的解析/home/root/mnt/media/var/cdrom/etc/lib (/lib32--32位的,/lib64-64位的)/lostfound/boot/proc/bin/sbin/snap/srv/usr/opt/dev/run/tmp 二. ls命令--操作文件夹1.说明2…

CSS中设置透明度的2个属性:opacity,RGBA以及它们的区别

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

【c语言实现内核链表】

在C语言中实现内核链表可以参考以下步骤: 定义链表节点结构:创建一个表示链表节点的结构体,通常包含一个数据成员和一个指向下一个节点的指针。 struct ListNode {// 数据成员int data;// 指向下一个节点的指针struct ListNode* next; };初…

Orange3数据可视化(箱线图-离散属性分布)

箱线图(Box Plot) 又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因图形如箱子,且在上下四分位数之外常有线条像胡须延伸出去而得名 箱线图可以显示属性值的分布,快速发现异常,例如重复的值,离群值等,挖掘数据的…

CAS 你知道吗?CAS 底层原理?谈谈对 UnSafe 的理解?

什么是CAS?以及CAS的底层原理 CAS(Compare and Swap) 是JUC中的并发编程中常用的原子操作,它用于实现多线程环境下的无锁同步,CAS操作包含三个操作数 : 内存位置(或称为变量的地址)、期望值和新值。 CAS的执行过程如…

Java面试八股之Java中==和equals()的区别

Java中和equals()的区别 操作符: 对于基本数据类型(如int、char、boolean等),比较的是它们的值是否相等。 对于对象引用类型,比较的是两个对象的内存地址(即是否指向同一个对象实例)。也就是…

day84 json中实现简单验证码

项目中的问题: 1 修改JS或CSS后,页面不能及时更新? 把浏览器-->"开发者工具"-->"网络"-->选中"禁用缓存" 2 如何把HTML页面转为JSP页面 将jsp页面中的<% page contentType"text/html;charse…