c++ 中介者模式(mediator)
2024-08-23 10:13:15
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介。下面以房屋中介来介绍中介者模式。
#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
最新文章
- Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
- 化繁为简&mdash;&mdash;分解复杂的SQL语句
- PHP数组
- java中常见的几种Runtimeexception
- Kinect for Windows SDK 1.8的改进及新特性
- 理解JavaScript中的事件轮询
- CSS中font-style的斜体属性Italic oblique的区别
- 针对binlog MIXED格式对表的增删改统计分析
- docker nodejs 基本应用
- 4k 对齐,你准备好了吗?
- Codeforces Round #302 (Div. 1)
- android MVC理解
- Fedora 问题总结第二季
- Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token &#39;name&#39;: was expecting (&#39;true&#39;, &#39;false&#39; or &#39;null&#39;)
- eMMC基础技术2:eMMC概述
- js中 let 与 var 的区别
- CodeForces 518E Arthur and Questions(贪心 + 思维)题解
- 从Nexus私服下载和上传资源(一)
- ArcMap 导入Excel坐标数据
- 记H5单页遇到的几个ios兼容问题