中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介。下面以房屋中介来介绍中介者模式。

#include <iostream>
#include <string> using namespace std; class Mediator; class Person
{
public:
virtual void setMediator(Mediator* mediator){};
virtual void sendMessage(string msg) = ;
virtual void getMessage(){};
protected:
Mediator *m_mediator;
}; class Mediator
{
public:
virtual void setHost(Person* p) = ;
virtual void setClient(Person* p) = ;
virtual void sendMsg(Person* p,string msg)
{ } }; class HouseMediator:public Mediator
{
public:
void setHost(Person* p)
{
m_host = p;
}
void setClient(Person* p)
{
m_client = p;
}
void sendMsg(Person* p,string msg)
{
if(p == m_host)
{
m_client->getMessage();
}
else
{
m_host->getMessage();
}
}
private:
Person* m_host;
Person* m_client;
}; class HostPerson:public Person
{
public:
void setMediator(Mediator* mediator)
{
m_mediator = mediator;
}
void sendMessage(string msg)
{
m_mediator->sendMsg(this,msg);
}
void getMessage(string msg)
{
cout << "房东收到消息!" <<endl;
} }; class ClientPerson:public Person
{
public:
void setMediator(Mediator* mediator)
{
m_mediator = mediator;
}
void sendMessage(string msg)
{
m_mediator->sendMsg(this,msg);
}
void getMessage(string msg)
{
cout << "客户收到消息!" <<endl;
} };

接口使用

#include "mediator.h"

int main()
{
HouseMediator *mediator = new HouseMediator();
HostPerson *host = new HostPerson();
host->setMediator(mediator);
ClientPerson *client = new ClientPerson();
client->setMediator(mediator);
mediator->setClient(client);
mediator->setHost(host);
client->sendMessage("我要租房子!");
host->sendMessage("有房子要出租!"); return ;
}

博客参照:

http://blog.csdn.net/wuzhekai1985/article/details/6673603

最新文章

  1. Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
  2. 化繁为简&mdash;&mdash;分解复杂的SQL语句
  3. PHP数组
  4. java中常见的几种Runtimeexception
  5. Kinect for Windows SDK 1.8的改进及新特性
  6. 理解JavaScript中的事件轮询
  7. CSS中font-style的斜体属性Italic oblique的区别
  8. 针对binlog MIXED格式对表的增删改统计分析
  9. docker nodejs 基本应用
  10. 4k 对齐,你准备好了吗?
  11. Codeforces Round #302 (Div. 1)
  12. android MVC理解
  13. Fedora 问题总结第二季
  14. Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token &#39;name&#39;: was expecting (&#39;true&#39;, &#39;false&#39; or &#39;null&#39;)
  15. eMMC基础技术2:eMMC概述
  16. js中 let 与 var 的区别
  17. CodeForces 518E Arthur and Questions(贪心 + 思维)题解
  18. 从Nexus私服下载和上传资源(一)
  19. ArcMap 导入Excel坐标数据
  20. 记H5单页遇到的几个ios兼容问题

热门文章

  1. VLOOKUP函数使用
  2. POJ2503:Babelfish
  3. (转)Inno Setup入门(七)——提供安装语言选项
  4. jq 合并json对象
  5. webpack快速入门(三):资源管理
  6. 洗碗机耗材:finish 亮碟 产品的选购
  7. Nodejs之express第三方核心模块的中间件——body-parser
  8. mysql server id一样导致报错
  9. MySQL 5.7.18 主从复制 Error1205
  10. 【BZOJ】1441 Min(数学)