中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

两个类或者多个类之间存在相互引用的情况,那么对象之间的关联性就会变复杂,维护起来会更加困难。所以,中介模式就是帮助对象之间的解耦。和门面模式(外观模式)不一样的是,门面模式是为了解耦系统间的关系,而中介者模式是为了解耦对象之间的关系。

中介者模式UML图,其中空心箭头表示继承,黑色箭头表示引用。该图表示,实体中介者Mediator依赖于同事实体,而同事抽象依赖于Mediator抽象类。把原本同事之间的依赖关系,变成了同事和中介者之间的依赖。类似于交换机和路由器的结构。

为什么ConcreteMediator不直接依赖Colleague呢? 因为ConcreteMediator要设计一套规则,来了解具体该交流的对象是哪一个

例如有这样的一个场景: 点击一次按钮会让界面和进度条的方式发生改变,而界面里又包含按钮和进度条。所以按钮依赖于界面和进度条,界面依赖于按钮和进度条,为了简化它们之间的关联关系,运用中介者模式如下:

//中介者
class IMediator{virtual void change(string status);
}
//实体类需实现的接口
class Widget{
public:IMediator * iMediator;virtual void request() = 0;
}//创建实体类
class Button:public Widget{void request(){this->iMediator->change("BUTTON");}void show1(){cout<<"Button 收到信息";}
}class ProgressBar:public Widget{void request(){this->iMediator->change("PROGRESSBAR");}void show2(){cout<<"ProgressBar 收到信息";}
}class UserInterface:public Widget{void request(){this->iMediator->change("USERINTERFACE");}void show3(){cout<<"UserInterface 收到信息";}
}//创建实体中介关系
class concreteMediator{UserInterface *userInterface;ProgressBar * progressBar;Button * buttonvoid change(string status){if ("BUTTON" == status){cout <<"Button 发送请求"progressBar ->show2();userInterface ->show3();}else if ("PROGRESSBAR" == status){//没有啥东西}else if("USERINTERFACE"  == status){cout <<"USERINTERFACE发送请求"button->show1();progressBar ->show2();}}
}//主函数示例
void mainProcess(Widget*widget){widget->request();/***如果传进来的对象是 button类型的* 那么输出是  "Button 发送请求"  "ProgressBar 收到信息" "UserInterface 收到信息"* 如果传进来的对象是 UserInterface类型的* 那么输出是  "UserInterface 发送请求" "Button 收到信息" "ProgressBar 收到信息" */
}

中介者的缺点也是显而易见的。就是要处理对象关联关系越多,对象越多,那么中介者类也会变得越来越臃肿。

设计模式理解:中介者模式(Mediator)相关推荐

  1. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:webabcd 介绍 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互 ...

  2. PHP设计模式之中介者模式(Mediator Pattern)了解下

    咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互, ...

  3. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  4. [设计模式] 17 中介者模式 Mediator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...

  5. 设计模式之中介者模式---Mediator Pattern

    模式的定义 中介者模式定义如下: Define an object that encapsulates how a set of objects interact.Mediator promotes ...

  6. 设计模式之中介者模式(Mediator Pattern)

    中介者模式定义 Define an object that encapsulates how a set of objects interact. Mediator promotes loose co ...

  7. 【23种设计模式】中介者模式(Mediator Pattern) .Net Core实现

    文章目录 简介 伪代码演示 简单实现 使用MediatR实现中介者模式 来源 简介 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类 ...

  8. 【设计模式】—— 中介者模式Mediator

    前言:[模式总览]----------by xingoo 模式意图 使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合. 这个中介者常常起着中间桥梁的作用,使其他的对象可以利用 ...

  9. 设计模式(10):行为型-中介者模式(Mediator)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  10. 设计模式-中介者模式(Mediator Pattern)

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

最新文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架-4.3 平台主界面
  2. mysql重置auto_increment字段
  3. 踩不出足迹(牛客练习赛88 )
  4. java异常——分析堆栈跟踪元素+使用异常机制的技巧
  5. 有关javabean的说法不正确的是_关于 JavaBean, 下列叙述中不正确的是 ( ) 。_学小易找答案...
  6. C++学习之路 | PTA乙级—— 1012 数字分类 (20分)(精简)
  7. Service Mesh 初体验
  8. [Matlab] 符号积分求对流扩散方程在给定初始条件下的一维解
  9. 水文特点是什么意思_自动气象站应建在什么地方?
  10. 《交互式程序设计 第2版》一2.2 代码的本质
  11. 【TensorFlow】TensorFlow快速入门
  12. 解决Win7系统没有声音 麦克无声等问题
  13. 微信小程序视频学习教程
  14. 清华校友中的两大人工智能大牛贾扬清和何凯明
  15. centOS安装vnc远程桌面
  16. 德国华人餐饮外卖的春天?
  17. 家里两个路由器,Wifi名相同密码相同,请问手机会自动选择信号强的路由器连接吗?
  18. Paper Reading - 基础系列 - 常用评价指标 ROC、PR、mAP
  19. 典型计算机电路组成,硬件工程师必会的几道题
  20. 李永乐数学基础过关660题线性代数选择题

热门文章

  1. 52个有用的 Docker 工具
  2. Redux中的重要概念
  3. DIV CSS兼容性解决IE6/IE7/FF浏览器的通用方法完美兼容
  4. linux 历史命令列表,fc – 显示历史列表中的命令或修改指定的历史命令并执行。 - Linux 命令大全...
  5. 2021 最流行的十大项目,新项目居榜首,总有长江后浪推前浪!
  6. 聊聊日常开发中,如何对接WebService协议?
  7. gitlab介绍、安装及gitlab CI、与jenkins的对比
  8. istio安装命令整理
  9. kafka基础架构详解
  10. Livy安装使用(Spark rest接口服务工具)