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模式三解耦系统内部各个对象之间的(双向)的关联关系
相关推荐
SunkingYang8 分钟前
MFC进程间消息传递:SendMessage、PostMessage与SendNotifyMessage分别如何实现,进程间通讯需要注意哪些问题
c++·mfc·通讯·postmessage·sendmessage·sendnotify·进程间
双河子思10 分钟前
JsonCpp
c++
superman超哥14 分钟前
仓颉语言导入语句使用深度解析
c语言·开发语言·c++·python·仓颉
xu_yule16 分钟前
算法基础-多源最短路
c++·算法·多源最短路
晚晶20 分钟前
[C++/流媒体/tcp/rtsp]构建一个简单的流媒体转发服务器,用于将rtsp推流转发出去
服务器·c++·tcp/ip·流媒体·转发·rtsp
阿闽ooo31 分钟前
单例模式深度解析:从饿汉到懒汉的实战演进
开发语言·c++·笔记·设计模式
x70x8037 分钟前
C++中auto的使用
开发语言·数据结构·c++·算法·深度优先
xu_yule42 分钟前
算法基础-单源最短路
c++·算法·单源最短路·bellman-ford算法·spfa算法
拼好饭和她皆失1 小时前
c++---快速记忆stl容器
开发语言·c++
晨晖21 小时前
直接插入排序
c语言·数据结构·c++·算法