目录

基本概念

代码与实例


基本概念

中介者模式(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的关系。

下面是UML图此图来源于大话设计模式

代码与实例

程序运行截图如下:

源码如下:

Head.h

#ifndef HEAD_H
#define HEAD_H#include <iostream>
#include <string>
using namespace std;class Colleague;
class ConcreteColleague1;
class ConcreteColleague2;//Mediator类 抽象中介者
class Mediator{public:virtual void send(const string &message, Colleague *colleague);virtual ~Mediator();Mediator();Mediator(Mediator &m);Mediator &operator = (Mediator &m);
};// Colleague类 抽象同事类
class Colleague{public:Colleague(Mediator *mediator);~Colleague();protected:Mediator *m_mediator;
};// ConcreteMediator类 具体中介者类
class ConcreteMediator: public Mediator{public:void setConcreteColleague1(ConcreteColleague1 *colleague);void setConcreteColleague2(ConcreteColleague2 *colleague);void send(const string &message, Colleague *colleague);~ConcreteMediator();private:ConcreteColleague1 *m_colleague1;ConcreteColleague2 *m_colleague2;
};//ConcreteColleague1和ConcreteColleague2等各种同事对象
class ConcreteColleague1: public Colleague{public:ConcreteColleague1(Mediator *mediator);~ConcreteColleague1();void send(const string &message);void notify(const string &message);};class ConcreteColleague2: public Colleague{public:ConcreteColleague2(Mediator *mediator);~ConcreteColleague2();void send(const string &message);void notify(const string &message);};#endif

Head.cpp

#include "Head.h"
#include <assert.h>void Mediator::send(const string &message, Colleague *colleague)
{}Mediator::~Mediator()
{cout << "Mediator::~Mediator()" << endl;
}Mediator::Mediator()
{}Mediator::Mediator(Mediator &m)
{}Mediator & Mediator::operator=(Mediator &m)
{return Mediator();
}Colleague::Colleague(Mediator *mediator)
{m_mediator = mediator;
}Colleague::~Colleague()
{cout << "Colleague::~Colleague()" << endl;
}void ConcreteMediator::setConcreteColleague1(ConcreteColleague1 *colleague)
{m_colleague1 = colleague;
}void ConcreteMediator::setConcreteColleague2(ConcreteColleague2 *colleague)
{m_colleague2 = colleague;
}void ConcreteMediator::send(const string &message, Colleague *colleague)
{if(colleague == m_colleague1){m_colleague1->notify(message);}else if(colleague == m_colleague2){m_colleague2->notify(message);}else{assert(!"雅喵蝶");}
}ConcreteMediator::~ConcreteMediator()
{cout << "ConcreteMediator::~ConcreteMediator()" << endl;
}ConcreteColleague1::ConcreteColleague1(Mediator *mediator): Colleague(mediator)
{}ConcreteColleague1::~ConcreteColleague1()
{cout << "ConcreteColleague1::~ConcreteColleague1()" << endl;
}void ConcreteColleague1::send(const string &message)
{m_mediator->send(message, this);
}void ConcreteColleague1::notify(const string &message)
{cout << "同事1得到信息: " << message << endl;
}ConcreteColleague2::ConcreteColleague2(Mediator *mediator): Colleague(mediator)
{}ConcreteColleague2::~ConcreteColleague2()
{cout << "ConcreteColleague2::~ConcreteColleague2()" << endl;
}void ConcreteColleague2::send(const string &message)
{m_mediator->send(message, this);
}void ConcreteColleague2::notify(const string &message)
{cout << "同事2得到信息: " << message << endl;
}

main.cpp

#include "Head.h"int main(int *argc, int *argv[]){ConcreteMediator *m = new ConcreteMediator;ConcreteColleague1 *c1 = new ConcreteColleague1(m);ConcreteColleague2 *c2 = new ConcreteColleague2(m);m->setConcreteColleague1(c1);m->setConcreteColleague2(c2);c1->send("吃饭了吗?");c2->send("你猜!");cout << endl << endl << "---------华丽的分割线---------" << endl << endl;delete m;delete c1;delete c2;getchar();return 0;
}

这个例子的中介模式,就是通过2个同事通过中介类去对话,这里每一个ConcreteColleague都认识ConcreteMediator,并且每一个ConcreteMediator认识所有的ConcreteColleague。

其中一个很有特点的代码就是这个:

void ConcreteColleague1::send(const string &message)
{m_mediator->send(message, this);
}

随后ConcreteMediator在根据传过来的this,进行传话。

C++设计模式-中介者模式相关推荐

  1. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

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

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

  3. 【设计模式】Java设计模式 - 中介者模式

    Java设计模式 - 中介者模式

  4. 设计模式中介者模式-备忘录模式-状态模式

    设计模式 中介者模式 基本介绍 中介者模式使用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式属于行为模式,使 ...

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

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

  6. 大话设计模式—中介者模式

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

  7. [设计模式]中介者模式之Events消息传递实现

    这篇文章比较短,修改自 写给大家看的设计模式之中介者中的例子 中介者模式的定义和目的自不必说, 参考上文即可. 本文针对实现方式做一个补充. 中介者模式增加了一个第三方对象(中介者)来控制两个对象(同 ...

  8. 学习设计模式 - 中介者模式

    中介者模式 一丶定义 定义一个中介者对象, 封装一系列对象的交互关系, 使得各对象不必显示的相互引用, 从而使其耦合松散, 而且可以独立的改变它们的交互 二丶理解 各对象显式地持有对方引用, 用于对象 ...

  9. PHP设计模式——中介者模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 中介者模式用一个中介者对象来封装一系列的对象交互.中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的 ...

最新文章

  1. 【SqlServer】SqlServer中的更新锁(UPDLOCK)
  2. 比特率 波特率 数据传输速率 区别(转)
  3. webservice用完关闭连接_解决调用WebService报基础连接已经关闭: 服务器关闭了本应保持活动状态的连接的错误的方法...
  4. 星型模型和雪花型模型比较
  5. ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)
  6. Mybatis中的resultType与resultMap区别
  7. H桥电机驱动原理与应用
  8. 设计模式——中介者模式
  9. 使用NSOperation为你的app加速
  10. [Godot] v4.0.alpha1 GDScript 实现第三人称控制器
  11. MySQL中使用adddate函数产生随机日期+时间
  12. win7录屏_Windows10系统自带的录屏工具你用过吗?
  13. 目标跟踪 | 目标跟踪算法总结
  14. matlab如何提取文本词干,英文词干提取(stemming)算法 - Lovins, Porter
  15. RT-Thread学习笔记——事件集
  16. 初中英语语法(015)-附加疑问句
  17. Xposed模块不生效的解决办法
  18. 布道微服务_18服务配置中心设计方案
  19. Ubuntu 16.04 tf-faster-rcnn 在CPU下训练数据
  20. 51单片机仿真例程-PWM直流电动机

热门文章

  1. CCNA之三:RIP协议
  2. 详解JavaScript变量类型判断及domReady原理 写得很好
  3. 今天的男生代表甲方的飞鸽传书
  4. 不对应该是撒尿C++五子棋
  5. 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
  6. 风生水起:Linux的突破口在中国?
  7. 人工智能时代,Python编程就业方向那么广,我该如何选择?
  8. 程序员,35岁就可能被替换的职业,遇到好的领导多么重要
  9. 听说做开发的工资随随便便就上10k?
  10. 经典面试题(41):以下代码将输出的结果是什么?