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

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

  • 动机:

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

2、案例分析
cpp 复制代码
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模式三解耦系统内部各个对象之间的(双向)的关联关系
相关推荐
不想写代码的星星4 小时前
虚函数表:C++ 多态背后的那个男人
c++
阿星AI工作室4 小时前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦1 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
端平入洛2 天前
delete又未完全delete
c++
端平入洛3 天前
auto有时不auto
c++
哇哈哈20214 天前
信号量和信号
linux·c++
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马4 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝4 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc4 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法