设计模式——中介者模式/调停者模式(C++实现)
#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++实现)的更多相关文章
- java设计模式9.备忘录模式、访问者模式、调停者模式
备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对 ...
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...
- 深入浅出设计模式——中介者模式(Mediator Pattern)
模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...
- Java设计模式之《调停者模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6518603.html 调停者模式. 我们想象一下这样的场景:一个系统内部通过许多的类互相之 ...
- 设计模式的征途—22.中介者(Mediator)模式
我们都用过QQ,它有两种聊天方式:一是私聊,二是群聊.使用QQ群,一个用户就可以向多个用户发送相同的信息和文件,从而无需一一发送,节省大量时间.通过引入群的机制,极大地减少系统中用户之间的两两通信,用 ...
- [工作中的设计模式]中介模式模式Mediator
一.模式解析 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介模式又叫调停者模式,他有如下特点: 1.有多个系统或者对 ...
- 7. 星际争霸之php设计模式--中介者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA设计模式之调停者模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从 ...
- 24种设计模式--中介者模式【Mediator Pattern】
各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一 ...
随机推荐
- Yaf框架的配置
http://www.laruence.com/manual/yaf.ini.html //先看一下惠新宸鸟哥yaf官网的配置说明 我们可以在php.ini中定义开发环节配置项,把本地开发设置成dev ...
- 使用Vue和thrift建立前后端交互的demo
初识thrift thrift 是 facebook 于2007年开发的一款跨平台 RPC(Remote Procedure Call) 软件框架, 它可以在多种平台上进行无缝交互,数据传输使用二进制 ...
- position的四种定位方式:static、fixed、relative、absolute
position属性用来规定元素的定位类型和方式 ①position:static 默认值,没有定位,元素出现在正常的流中: ②position:fixed 固定定位 是相对于浏览器窗口来进行定位: ...
- hihocoder 1054 滑动解锁 dfs
详细分析见滑动解锁分析 AC代码 #include <cstdio> #include <cmath> #include <cctype> #include < ...
- 检验金额合法性, 只能是正数 或小数(常用js总结)
//检验金额合法性 只能是正数 或小数 function checkMoney(fileds){ $(fileds).keyup(function () { ,}/); var txt = ''; i ...
- ap module omap4460
http://gitorious.org/ap-module-omap4460 Dashboard Register Login Activities Projects Teams ap module ...
- Action调用Service
Java Web项目,写到Action的时候,往往会要引入Service,这个是一个常见的操作. 但是,我自认为引入Service需要给它get和set方法,并且这个习惯已经沿用到现在.然而,自从参与 ...
- Array和ArrayList的异同点
Array和ArrayList的异同点 1.不同点: (1)Array只能存储同构的对象, ArrayList可以存储异构的对象 (2)在CLR托管对中的存放方式中,Array是始终是连续存放的, A ...
- Linux查看非root运行的进程
Linux查看非root运行的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -U root -u root -N PID TTY TIME CMD ...
- 教我徒弟Android开发入门(三)
前言: 老实说,我有点不知道该讲什么了,希望看过的人能给我提提意见,感激不尽. 本期知识点: 长按事件,log的简单使用,双击退出程序功能的实现 正文: 上一期我们了解到点击事件其实就是让控件绑定一个 ...