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模式三解耦系统内部各个对象之间的(双向)的关联关系
相关推荐
奋斗的小花生1 小时前
c++ 多态性
开发语言·c++
闲晨1 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
UestcXiye3 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
霁月风4 小时前
设计模式——适配器模式
c++·适配器模式
jrrz08284 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
咖啡里的茶i4 小时前
Vehicle友元Date多态Sedan和Truck
c++
WaaTong5 小时前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
海绵波波1075 小时前
Webserver(4.9)本地套接字的通信
c++
@小博的博客5 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
爱吃喵的鲤鱼6 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++