设计模式: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( ...
随机推荐
- docker安装mysql,设置mysql初始密码
docker安装mysql,只需要2分钟就可以完成 docker search mysql 拉取mysql镜像(https://hub.docker.com/_/mysql) docker pull ...
- FIS3安装与编译
安装 FIS3 npm install -g fis3 -g 安装到全局目录,必须使用全局安装,当全局安装后才能在命令行(cmd或者终端)找到 fis3 命令 安装过程中遇到问题具体请参考 fis#5 ...
- js清除所有的空格
/** * 清除所有的空格 * @returns {*} */ String.prototype.removeSpace = function () { var str = this.replaceA ...
- MyBatis一对多嵌套list返回结果集以及分页查询问题处理
这两天在整理原有系统接口时,遇到后端的人员-角色-菜单的权限接口没有进行连表的关联查询操作,前端拿数据非常不方便,现在将接口相关sql进行修改并让前端可以一次性拿到想要的数据 原有的单表简单sql: ...
- 初识Java Java基础知识
今天给大家带来的是初级Java基础部分的知识:包括初识Java.变量.常量.数据类型.运算符.各种选择结构.循环结构.数组等Java的基础语法部分!!!内容.步骤超详细,附有各种案例的源代码(可以直接 ...
- 从Spring Initializr开始
出识springcloud我们这里需要建立两个项目 来感受下微服务 一.配置服务 1. Spring Initializr. 用idea自带的 Spring Initializr. 建立第一个项目 2 ...
- CCNA-Part1:网络基础概念
由于身处一家网络公司,日常项目中设计到的网络概念较多,恰逢之后公司组织相关培训.借此机会,打算写下一系列文章用于之后梳理并回顾.文章主要涉及 NA,NP 中所覆盖的知识.由于网络分为较多方向,如路由交 ...
- python 2 与python 3区别汇总
python 2 与python 3区别汇总 一.核心类差异1. Python3 对 Unicode 字符的原生支持.Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类 ...
- Win8.1卸载64位Oracle Database 11g的详细图文步骤记录
Oracle Database 11g在Win8 上的卸载过程记录. Step1停用oracle服务:进入计算机管理/任务管理器,在服务中,找到oracle开头的所有服务,右击选择停止: Step2 ...
- 实战笔记丨JDBC问题定位指南
JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...