中间者模者模式原理:中介者维持所有要交互对象的指针或者对象,所有对象维持一个中介者的指针或者对象。

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class Mediator;
  7. class Person
  8. {
  9. public:
  10. virtual GetMessage(string message)
  11. {
  12.  
  13. }
  14. virtual void SendMessage(string message)
  15. {
  16.  
  17. }
  18. virtual void SetMediator(Mediator *pmdiator)
  19. {
  20.  
  21. }
  22. protected:
  23. Mediator *m_pmediator;
  24. };
  25.  
  26. class Mediator
  27. {
  28. public:
  29. void Send(string message,Person *person)
  30. {
  31. if (person == m_renter)
  32. {
  33. m_landlord->GetMessage(message);
  34. }
  35. else
  36. {
  37. m_renter->GetMessage(message);
  38. }
  39. }
  40. void SetRenter(Person *prenter)
  41. {
  42. m_renter = prenter;
  43. }
  44. void SetLandlord(Person *plandlord)
  45. {
  46. m_landlord = plandlord;
  47. }
  48. private:
  49. Person *m_renter;
  50. Person *m_landlord;
  51. };
  52.  
  53. class Renter:public Person
  54. {
  55. public:
  56. virtual GetMessage(string message)
  57. {
  58. cout << "租客收到租房信息:"<<message<<endl;
  59. }
  60. virtual void SendMessage(string message)
  61. {
  62. m_pmediator->Send(message,this);
  63. }
  64. virtual void SetMediator(Mediator *pmediator)
  65. {
  66. m_pmediator = pmediator;
  67. }
  68. };
  69. class Landlord:public Person
  70. {
  71. public:
  72. virtual GetMessage(string message)
  73. {
  74. cout << "房东收到租房信息:"<<message<<endl;
  75. }
  76. virtual void SendMessage(string message)
  77. {
  78. m_pmediator->Send(message,this);
  79. }
  80. virtual void SetMediator(Mediator *pmediator)
  81. {
  82. m_pmediator = pmediator;
  83. }
  84. };
  85.  
  86. int main()
  87. {
  88. Mediator *pmediator = new Mediator();
  89. Person *prenter = new Renter();
  90. Person *plandlord = new Landlord();
  91.  
  92. pmediator->SetLandlord(plandlord);
  93. pmediator->SetRenter(prenter);
  94. prenter->SetMediator(pmediator);
  95. plandlord->SetMediator(pmediator);
  96.  
  97. prenter->SendMessage("我要租一个有网的房子");
  98. plandlord->SendMessage("我现在有一个两室一厅的房子要出租");
  99. return 0;
  100. }

设计模式之中介者模式(Mediator)的更多相关文章

  1. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    原文:乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:weba ...

  2. 二十四种设计模式:中介者模式(Mediator Pattern)

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

  3. [设计模式] 17 中介者模式 Mediator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...

  4. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程.它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  5. 大熊君说说JS与设计模式之------中介者模式Mediator

    一,总体概要 1,笔者浅谈 我们从日常的生活中打个简单的比方,我们去房屋中介租房,房屋中介人在租房者和房东出租者之间形成一条中介.租房者并不关心他租谁的房.房东出租者也不关心他租给谁.因为有中介的存在 ...

  6. 设计模式 笔记 中介者模式 Mediator

    //---------------------------15/04/27---------------------------- //Mediator 中介者模式----对象行为型模式 /* 1:意 ...

  7. 行为型设计模式之中介者模式(Mediator)

    结构 意图 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 适用性 一组对象以定义良好但是复杂的方式进行通信.产生的相互 ...

  8. 【设计模式】—— 中介者模式Mediator

    前言:[模式总览]——————————by xingoo 模式意图 使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合. 这个中介者常常起着中间桥梁的作用,使其他的对象可以利用 ...

  9. 【转】设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据"单一职责原则",我们应该尽量将对象细化,使其只负责或呈现单一的职 ...

随机推荐

  1. 使用memcached实现tomcat集群session共享

    环境centos6.7,下载安装必要的软件:yum -y install epel-release(tomcat7在此源上,tomcat7是现在主流版本) yum -y install tomcat ...

  2. Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

    问题提示:Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace. ...

  3. 【转】MessageBox

    MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容.信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框. 1.函数原型及参数 function ...

  4. 【转载】学习C#的28条建议

    1. 看得懂的书,请仔细看:看不懂的书,请硬着头皮看:2. 别指望看第一遍书就能记住和掌握什么——请看第二遍.第三遍:3. 学习编程的秘诀是:编程,编程,再编程:4. 请把书上的程序例子亲手输入到电脑 ...

  5. 小课堂week15 年终小结

    年终小结 一年的最后,想和大家回顾一下今年讲过的技术和书,用一些问答,一起来提炼一下精华. Spark 为什么需要分布式计算? 计算的增长速度超过了硬件的增长,单一服务器无法负荷.多服务器带来的是复杂 ...

  6. word中让首页和目录不显示页码的方法

    在正文前一页,插入->分隔符->下一页,然后插入页码,取消与前一页页眉的链接,删除首页和目录的页码即可

  7. Python 文件I/O

    文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的. 1.打开文件 语法: open(name[, mode[, buffering]]) 1.1文件模式 1 ...

  8. 九度oj 1523 从上往下打印二叉树

    原题链接:http://ac.jobdu.com/problem.php?pid=1523 建树,再层次遍历bfs.为了找根方便些,加了father指针... 如下: #include<algo ...

  9. iOS8中如何将状态栏的字体颜色改为白色

    网上的一些方法在我这行不通, 比如: UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent ...

  10. [工具]IL Mapper2(C# -> IL 转换器)

    下载地址:IL_Mapper2_exe.zip 源文件:IL_Mapper2_src.zip 简介 此工具可以直接把C#代码转换成IL代码查看,省去编译和手动操作ildsam的繁琐.希望能对想研究IL ...