设计模式:mediator模式
目的:解决多组件之间的通信问题,使得组件之间的通信变得简单
核心:提供一个管理类,用来处理组件之间的通信,所有的组件只和管理类通信,组件彼此之间不在单独通信
例子:
class Mediator
{
public:
virtual void Send(string &message, Person *person) = 0;
virtual void SetRenter(Person *renter) = 0;
virtual void SetLandlord(Person *landlord) = 0;
}; class Person
{
public:
virtual void SetMediator(Mediator *mediator) = 0;
virtual void SendMessage(string message) = 0;
virtual void GetMessage(string message) = 0;
protected:
Mediator *p_mediator;
};
class Renter: public Person
{
public:
void SetMediator(Mediator *mediator)
{
p_mediator = mediator;
}
void SendMessage(string message)
{
p_mediator->Send(message, this);
}
void GetMessage(string message)
{
cout << "租房者收到房东发来的消息:"<< message << endl;
}
}; class Landlord: public Person
{
public:
void SetMediator(Mediator *mediator)
{
p_mediator = mediator;
}
void SendMessage(string message)
{
p_mediator->Send(message,this);
}
void GetMessage(string message)
{
cout << "房东收到租客发来的消息:" << message << endl;
}
};
class HouseMediator: public Mediator
{
private:
Person *p_renter;
Person *p_landlord; public:
HouseMediator(): p_renter(NULL), p_landlord(NULL)
{
}
void SetRenter(Person *renter)
{
p_renter = renter;
}
void SetLandlord(Person *landlord)
{
p_landlord = landlord;
}
void Send(string &message, Person *person) //消息的处理函数
{
if(person == p_renter)
p_landlord->GetMessage(message);
else
p_renter->GetMessage(message);
}
};
int main()
{
Renter* r = new Renter();
Landlord* l = new Landlord();
HouseMediator* hm = new HouseMediator();
r->SetMediator(hm);
l->SetMediator(hm);
hm->SetRenter(r);
hm->SetLandlord(l); r->SendMessage(string("东西坏了,房东快来修理!"));
l->SendMessage(string("到时间了,该叫房租了!")); return 0;
}
设计模式:mediator模式的更多相关文章
- 设计模式--中介(Mediator)模式
时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- C++设计模式-Mediator中介者模式
Mediator中介者模式作用:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. UML如下: Colleage抽象同事类 ...
- Mediator模式(仲裁者设计模式)
Mediator ? Mediator的意思是"仲裁者""中介者".一方面,当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者.当仲裁者 ...
- 设计模式(十六)Mediator模式
在实际的工作小组的交流过程是,组员向仲裁者报告,仲裁者向组员下达指示,组员之间不再互相询问和指示.Mediator模式是指,当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者. ...
- 设计模式C++描述----18.中介者(Mediator)模式
一. 举例 比如,现在中图和日本在关于钓鱼岛问题上存在争端.这时,联合国就会站出来,做为调解者,其实也没什么好调解的,钓鱼岛本来就是中国的,这是不争的事实!联合国也就是个传话者.发言人. 结构图如下: ...
- 《图解设计模式》读书笔记7-2 Mediator模式
目录 Mediator模式简介 示例程序 示例程序类图 代码 Mediator模式角色和类图 角色 模式类图 思路拓展 简单化 角色复用 Mediator模式简介 Mediator模式即中介者模式,可 ...
- 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考
http://www.cnblogs.com/insus/p/4142264.html 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考 首先普世的编程架 ...
- 设计模式——外观模式(Facade)
1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. 例子1:一个电源总开关可以控制四盏灯 ...
- linkin大话设计模式--常用模式总结
linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...
随机推荐
- Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...
- java之FTP上传下载
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- django drf 10大请求序列化方法
## 整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py ```python"""1) 单整体改,说明前台要提供修改的数据,那么数据就需要 ...
- Python函数参数详解
Python函数参数详解 形参与实参 什么是形参 在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名. 什么是实参 在调用函数阶段传入的值称为实际参数,简称实参.相当于"变量值& ...
- vue全家桶(3.2)
4.5.创建实例 可以创建一个自定义实例应用于多个请求接口 <template> <div class="page"> </div> </ ...
- sql 语句和实例
修改字段格式的sql语句: alter table tablename alter column colname newDataType 比如:alter table mytable alter co ...
- 1.记我的第一次python爬虫爬取网页视频
It is my first time to public some notes on this platform, and I just want to improve myself by reco ...
- svn和GitHub的使用
GitHub的工作流程和命令介绍:http://www.runoob.com/w3cnote/git-guide.html svn的基本使用用法:http://www.cnblogs.com/xile ...
- Linux文件权限学习笔记
文件权限共10个字符,第一个字符表示该文件是[文件夹]或[文件]——如果是字符“d"则表示该文件是文件夹:如果是字符“-”则表示是文件. 后九个字符,三个一组,共三组,分别表示[所有者权限] ...
- Git 新建版本库命令
Command line instructions Git global setup git config --global user.name "张三" git config - ...