#include <iostream>
#include <string> using namespace std; class Colleague; class Mediator
{
public:
virtual void Send(string strMessage, Colleague* pstColleague) = ;
}; class Colleague
{
public:
Colleague(Mediator* pstMediator): m_pstMediator(pstMediator)
{ } virtual void Send(string strMes) = ; virtual void Notify(string strMes) = ; protected:
Mediator* m_pstMediator;
}; class ConcreteColleagueA: public Colleague
{
public:
ConcreteColleagueA(Mediator* pstMediator):Colleague(pstMediator)
{ } virtual void Send(string strMsg)
{
m_pstMediator->Send(strMsg, this); } virtual void Notify(string strMes)
{
cout<< "同事1得到消息: "<< strMes<< endl;
}
}; class ConcreteColleagueB: public Colleague
{
public:
ConcreteColleagueB(Mediator* pstMediator):Colleague(pstMediator)
{ } virtual void Send(string strMsg)
{
m_pstMediator->Send(strMsg, this); } virtual void Notify(string strMes)
{
cout<< "同事2得到消息: "<< strMes<< endl;
}
}; class ConcreteMediator: public Mediator
{
public:
void SetColleagueA(ConcreteColleagueA* pstColleague)
{
m_pstColleagueA = pstColleague;
} void SetColleagueB(ConcreteColleagueB* pstColleague)
{
m_pstColleagueB = pstColleague;
} virtual void Send(string strMes, Colleague* pstColleague)
{
if (pstColleague == m_pstColleagueA)
{
m_pstColleagueB->Notify(strMes);
}
else
{
m_pstColleagueA->Notify(strMes);
}
} private:
ConcreteColleagueA* m_pstColleagueA;
ConcreteColleagueB* m_pstColleagueB;
}; int main(int argc, char* argv[])
{
ConcreteMediator* pstMediatorA = new ConcreteMediator(); ConcreteColleagueA* pstColleagueA = new ConcreteColleagueA(pstMediatorA);
ConcreteColleagueB* pstColleagueB = new ConcreteColleagueB(pstMediatorA); pstMediatorA->SetColleagueA(pstColleagueA);
pstMediatorA->SetColleagueB(pstColleagueB); pstColleagueA->Send("How are you?");
pstColleagueB->Send("I am fine, Thank You!"); return ;
}
////////////////////////////////////////////
[root@ ~/learn_code/design_pattern/21_mediator]$ ./mediator
同事2得到消息: How are you?
同事1得到消息: I am fine, Thank You!

设计模式——中介者模式/调停者模式(C++实现)的更多相关文章

  1. java设计模式9.备忘录模式、访问者模式、调停者模式

    备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对 ...

  2. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)

      中介者模式(Mediator)   调度.调停   意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...

  3. 深入浅出设计模式——中介者模式(Mediator Pattern)

    模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...

  4. Java设计模式之《调停者模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6518603.html 调停者模式. 我们想象一下这样的场景:一个系统内部通过许多的类互相之 ...

  5. 设计模式的征途—22.中介者(Mediator)模式

    我们都用过QQ,它有两种聊天方式:一是私聊,二是群聊.使用QQ群,一个用户就可以向多个用户发送相同的信息和文件,从而无需一一发送,节省大量时间.通过引入群的机制,极大地减少系统中用户之间的两两通信,用 ...

  6. [工作中的设计模式]中介模式模式Mediator

    一.模式解析 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介模式又叫调停者模式,他有如下特点: 1.有多个系统或者对 ...

  7. 7. 星际争霸之php设计模式--中介者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. JAVA设计模式之调停者模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从 ...

  9. 24种设计模式--中介者模式【Mediator Pattern】

    各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一 ...

随机推荐

  1. Mysql的锁机制与PHP文件锁处理高并发简单思路

    以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出 ...

  2. Quartz基本使用

    1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样.在了解它之前,首先熟悉几个概念. 2.基本概念 2.1 Job:表示一个工作,要执行的具体内容. ...

  3. [php] in_array 判断问题(坑)

    <?php $arr = array("Linux"); if (in_array(0, $arr)) { echo "match"; } ?> 执 ...

  4. python file文件操作--内置对象open

    说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前工作目录)或者一个绝对路径,当传入路径不存在此文件会报错 ...

  5. 【推荐】免费,19 款仿 Bootstrap 后台管理主题下载

    声明: 1. 本篇文章提到的仿 Bootstrap 风格的主题,是基于 jQuery 的 ASP.NET MVC 控件库的主题. 2. FineUIMvc(基础版)完全免费,可以用于商业项目. 目录 ...

  6. postman模拟HttpPost请求的方法

    开始想装postman的Google浏览器插件的,但是发现应用商店无法搜索,下载的拖进扩展也装不上... 于是找到了这个绿色版的Postman桌面程序!有需要的可以下载,点击下载:http://dow ...

  7. ‘true’==true返回false详解

    JavaScript高级程序设计(第3版)  第三章非常完整地解释了原因. 3.5.7 相等操作符 在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: . 如果有一个操作数是布尔值,则在比较 ...

  8. DataCleaner第一章

    Part1. Introduction to DataCleaner 介绍DataCleaner |--What is data quality(DQ) 数据质量? |--What is data p ...

  9. (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)

      在一台测试服务器测试Python脚本时,执行Python脚本时报如下错误: 主要错误信息为"operation the sql fail!1045 (28000): Access den ...

  10. java.sql.SQLException之数组越界

    java.sql.SQLException之数组越界 1.具体错误如下: (1)java.sql.SQLException:Parameter index out of range(0<1) ( ...