重新温习GOF23到第18个中介者模式了,感觉还是蛮不错的,写了一个小小的Demo来解释下他们之间的关系。

中介者模式其实就相当于:中介,租房人,还有房主三者之间的关系。

房主A,租房人B首先联系了中介,在中介那里记名字了。

房主A有空房了,发条消息给中介,中介将A有空房的消息发给其他人。

在此之上,demo做了小小扩充,当又有租房人C联系中介,B发了条消息,A与C都会收到B的消息。

#include <iostream>
#include <vector>
using namespace std;
#include <crtdbg.h>
class Person;
class Mediator
{
public:virtual void SendMsg(string msg, Person *pItem) = 0;
};class Person
{
public:Person(Mediator *pMediator):m_pMediator(pMediator){}virtual void Say(string msg) = 0;virtual void GetMsg(string msg) = 0;protected:Mediator *m_pMediator;
};class PersonA : public Person
{
public:PersonA(Mediator *pMediator):Person(pMediator){}virtual void Say(string msg){cout<<"PersonA said:"<<endl;m_pMediator->SendMsg(msg, this);}void GetMsg(string msg){cout<<"PersonA GetMsg: "<<msg.c_str()<<endl;}
};class PersonB : public Person
{
public:PersonB(Mediator *pMediator):Person(pMediator){}virtual void Say(string msg){cout<<"PersonB said:"<<endl;m_pMediator->SendMsg(msg, this);}void GetMsg(string msg){cout<<"PersonB GetMsg: "<<msg.c_str()<<endl;}
private:
};class PersonC : public Person
{
public:PersonC(Mediator *pMediator):Person(pMediator){}virtual void Say(string msg){cout<<"PersonC said:"<<endl;m_pMediator->SendMsg(msg, this);}void GetMsg(string msg){cout<<"PersonC GetMsg: "<<msg.c_str()<<endl;}
private:
};class ConcreateMediator : public Mediator
{
private:vector<Person*> conentList;
public:void AddFriend(Person* pPerson)  // 没有添加该好友,则添加进去{vector<Person*>::iterator iter = conentList.begin();for (; iter != conentList.end(); iter++){if(*iter == pPerson)break;}if(iter == conentList.end()){conentList.push_back(pPerson);}}void SendMsg(string msg, Person *pItem) //如假设A不认识其他人,A发送信息,通过中介,则可以发送给其他的人{vector<Person*>::iterator iter = conentList.begin();while(iter != conentList.end()){if(*iter != pItem)(*iter)->GetMsg(msg);iter++;}}
};
void main()
{_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF) | _CRTDBG_LEAK_CHECK_DF);ConcreateMediator *pMediator = new ConcreateMediator();Person *pA = new PersonA(pMediator);Person *pB = new PersonB(pMediator);Person *pC = new PersonC(pMediator);pMediator->AddFriend(pA);pMediator->AddFriend(pB);pA->Say("call JesonYang");pMediator->AddFriend(pC);pB->Say("demo by yc7369");delete pA;delete pB;delete pC;delete pMediator;}

转载于:https://www.cnblogs.com/JesonYang/p/6124127.html

Mediator模式(C++中介者模式含个人Demo源码)相关推荐

  1. java mediator模式_中介者模式(Mediator)

    中介者模式 一. 中介者模式 1.1 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使耦合松散,而且可以独立的改变他们之间的交互. 1.2 角色 抽象中介者类(A ...

  2. 行为型模式:中介者模式

    LieBrother公众号原文: 行为型模式:中介者模式 十一大行为型模式之二:中介者模式. 简介 姓名 :中介者模式 英文名 :Mediator Pattern 价值观 :让你体验中介是无所不能的存 ...

  3. Java23种设计模式——19.行为型模式之中介者模式

    Java中除去有设计原则之外,还有23中设计模式. 这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题. 并且在这些模式中,可以说是将语言的使用体现的淋 ...

  4. 行为型模式:中介者模式 1

    前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. LieBrother公众号原文: 行为型模式:中介者模式 十一大行为型模式之二:中介者模式. 简介 姓名 :中介 ...

  5. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  6. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2 ...

  7. (一)TestNG测试框架(含Demo源码)

    目录 一.TestNG是什么 二.关于TestNG使用 三.关于TestNG流程控制 四.结合场景讲解TestNG注解 五.TestNG框架(Demo源码) 六.补充知识点 一.TestNG是什么 T ...

  8. 资源:代码舞动动画 提供gif图片(含程序、源码、下载地址)

    资源:代码舞动动画 提供gif图片(含程序.源码.下载地址) 案例 · 教程 · 地址: 3行代码 为你的网站博客添加萌萌哒可爱二次元女动漫玩偶人物(看板娘) 抖音上爆红的美女动态代码图如何实现? 以 ...

  9. [含文档+源码等]微信小程序校园生活小助手+后台管理系统前后分离VUE[包运行成功]

            博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 [含文档+源码等]微信小程序校园生活小助手+后台管理系统前后分离V ...

最新文章

  1. HSV颜色空间 HSV空间各通道分离实验
  2. 无监督学习多模态融合!腾讯优图联合厦门大学发布2021十大AI趋势
  3. numpy的random模块
  4. 每天一点点之vue框架开发 - 部署到线上
  5. Windows核心编程 第27章 硬件输入模型和局部输入状态
  6. ASP.NET多语言网页设计
  7. 使用GDI+实现圆形进度条控件的平滑效果
  8. 征服数据科学面试的10个小技巧(附资源)
  9. Apache与Nginx实现Web页面动静分离(产生的原因,应用场景)
  10. IOS底层数据结构--class
  11. 销售记账管理系统php源码,crm客户销售管理系统销售统计ERP系统源php源码源码办公审批管理...
  12. 西北工业大学 编译原理实验 minic文法 编译器前端 flex-bison实现 的 debug手记
  13. 电路自学2-储能元件(电容+电感+储能元件的串并联)
  14. 【面试突击算法第二天】剑指offer + Leetcode Hot100
  15. SFTP传输文件工具FileZilla下载安装教程
  16. 查询江苏丹阳高考成绩2021,2020年江苏县级市各大高中高考成绩回顾
  17. 张一鸣是如何练就字节跳动的
  18. oracle000936,奇怪的ORA-000936错误
  19. FFmpeg的HEVC解码器源代码简单分析:概述
  20. linux 使用 nginx 搭建 zookeeper 集群

热门文章

  1. java 轻量级 编辑器_Java相关概念汇总
  2. linux内存机制的virt,关于linux:转载理解virt-res-shr之间的关系
  3. wallpaper怎么导入视频_抖音上爆火的手绘视频怎么做?这篇文章来教你!
  4. ndk c调用java_使用NDK将Android转换为C,然后在C中调用Java函数
  5. html中地图的绘制toolbars,tkinter内嵌Matplotlib系列(二)之函数曲线绘制
  6. php镂空窗,木窗镂空的雕刻象征着什么?黑色在彝族人民心中有何寓意?陆川猪为何是著名“陆川三宝”之一?...
  7. mysql随机查询多条记录表_MySQL 随机查询表中N条记录
  8. Python DES
  9. 百度 自然语言处理API
  10. npumpy.insert(arr, obj, values[, axis])