设计模式——中介者模式/调停者模式(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】
各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一 ...
随机推荐
- 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...
- CodeForces - 788B Weird journey 欧拉路
题意:给定n个点,m条边,问能否找到多少条符合条件的路径.需要满足的条件:1.经过m-2条边两次,剩下两条边1次 2.任何两条路的终点和起点不能相同. 欧拉路的条件:存在两个或者0个奇度顶点. 思路 ...
- 实战小项目BUG纪录
果然,作为程序员最可爱的女朋友就是各种BUG,解决了你的开发能力和开发效率就会上升到一个新的层次.反之,在你面对BUG的时候,如果轻易的就放弃了,你也就失去了一次自我成长的机会.学习就是这样的,我们有 ...
- Redis笔记2-发布订阅
发布/订阅"(publish/subscribe)模式可以实现进程间通信,订阅者可以订阅一个或多个频道(channel),而发布者可以向指定的频道发送消息,所有订阅次频道的订阅者都会收到次消 ...
- java 集合框架(二)Iterable接口
Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法 修饰符和返回值 方法名 描述 Iterator<T> iter ...
- "No Python interpreter configured for the project " in Pycharm for python selenium
自动化测试问题: pyCharm提示python Interpreter没有设置,点击configure Python Interpreter,进入Settings 在 Project Interpr ...
- hi3531的时钟系统
时钟管理模块对芯片时钟输入.时钟生成和控制进行统一的管理,包括: 时钟管理模块有以下两部分输入:
- linux命令之 ifconfig
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...
- sea.js介绍
网址:http://seajs.org/docs/ SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等Ja ...
- Tomcat中的Context.xml的<Loader delegate="true"/>
Tomcat中的Context.xml的<Loader delegate="true"/> 1.<Loader delegate="true" ...