设计模式-中介者模式
中介者模式结构图
意图:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
其中:
- Mediator(中介者)定义一个接口用于各同事(Colleague)对象通信。
- ConcreteMediator(具体中介者)通过协调同事对象实现协作行为;了解并维护它的各个同事。
- Collegue class(同事类)知道它的中介者对象;每一个同事类对象在需要与其他同事通信的时候与它的中介通信。
应用举例
房屋出租。
#include <iostream>
#include <string>
#include <vector>
using namespace std;class Mediator;//抽象人
class Person
{
public:virtual void SetMediator(Mediator *mediator) {} //设置中介virtual void SendMessage(string message) {} //向中介发送信息virtual void GetMessage(string message) {} //从中介获取信息protected:Mediator *m_mediator; //中介
};//抽象中介机构
class Mediator
{
public:virtual void Send(string message, Person *person) {}virtual void SetA(Person *A) {} //设置其中一方virtual void SetB(Person *B) {}
};//租房者
class Renter : public Person
{
public:void SetMediator(Mediator *mediator) { m_mediator = mediator; }void SendMessage(string message) { m_mediator->Send(message, this); }void GetMessage(string message) { cout << "租房者收到信息" << message; }
};
//房东
class Landlord : public Person
{
public:void SetMediator(Mediator *mediator) { m_mediator = mediator; }void SendMessage(string message) { m_mediator->Send(message, this); }void GetMessage(string message) { cout << "房东收到信息:" << message; }
};
//房屋中介
class HouseMediator : public Mediator
{
private:Person *m_A; //租房者Person *m_B; //房东
public:HouseMediator() : m_A(0), m_B(0) {}void SetA(Person *A) { m_A = A; }void SetB(Person *B) { m_B = B; }void Send(string message, Person *person){if (person == m_A) //租房者给房东发信息m_B->GetMessage(message); //房东收到信息elsem_A->GetMessage(message);}
};int main()
{Mediator *mediator = new HouseMediator();Person *person1 = new Renter(); //租房者Person *person2 = new Landlord(); //房东mediator->SetA(person1);mediator->SetB(person2);person1->SetMediator(mediator);person2->SetMediator(mediator);person1->SendMessage("我想北京海淀租套房子,价格7000元一个月\n");person2->SendMessage("出租北京海淀房子,70平米,6500元一个月\n");getchar();return 0;
}
适用性
- 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
- 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
- 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
设计模式-中介者模式相关推荐
- Python设计模式-中介者模式
Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...
- 7. 星际争霸之php设计模式--中介者模式
题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...
- 【设计模式】Java设计模式 - 中介者模式
Java设计模式 - 中介者模式
- 设计模式中介者模式-备忘录模式-状态模式
设计模式 中介者模式 基本介绍 中介者模式使用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式属于行为模式,使 ...
- 设计模式-中介者模式(Mediator Pattern)
设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...
- 大话设计模式—中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. ...
- [设计模式]中介者模式之Events消息传递实现
这篇文章比较短,修改自 写给大家看的设计模式之中介者中的例子 中介者模式的定义和目的自不必说, 参考上文即可. 本文针对实现方式做一个补充. 中介者模式增加了一个第三方对象(中介者)来控制两个对象(同 ...
- C++设计模式-中介者模式
目录 基本概念 代码与实例 基本概念 中介者模式(Mediator)用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的关系. 下面 ...
- 学习设计模式 - 中介者模式
中介者模式 一丶定义 定义一个中介者对象, 封装一系列对象的交互关系, 使得各对象不必显示的相互引用, 从而使其耦合松散, 而且可以独立的改变它们的交互 二丶理解 各对象显式地持有对方引用, 用于对象 ...
- PHP设计模式——中介者模式
声明:本系列博客参考资料<大话设计模式>,作者程杰. 中介者模式用一个中介者对象来封装一系列的对象交互.中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的 ...
最新文章
- 常见的容错机制+failover+failback
- c语言实战1200例 pdf6,C语言程序设计6.6.2.pdf
- 网络编程(part9)--socket套接字编程之TCP套接字
- Github git 命令下载加速
- java openssl_verify_CryptoAPI:如何使用CryptVerifySignature验证来自OpenSSL或Java的DSA签名...
- shell脚本批量导出MYSQL数据库日志/按照最近N天的形式导出二进制日志[连载之构建百万访问量电子商务网站]...
- .net中三种Timer使用总结
- kong 网关教程入门
- pygame之key模块
- 2022年低压电工考试题及在线模拟考试
- H5 微信分享显示标题和图标
- 龙芯3a4000 交叉编译链接错误
- NLP揭秘:除了宝石,女儿也是灭霸的真爱(附代码)
- android常用地图坐标转换
- 2021-7-28-自动化运维Ansible
- [Irving]字符串相似度-字符编辑距离算法(c#实现)
- 线上测评图形题技巧二
- 小红书竞品分析_App竞品分析报告:小红书VS洋码头
- 用python画花瓣-用python画花瓣
- 抖音上的战斗力测试软件,抖音战斗力测试app
热门文章
- 【PHP】\r \r\n \t是什么
- Chrome浏览器占用CPU资源过高(Software Reporter Tool)
- c 语言 如何优化cpu占用率,C#程序优化-有效减少CPU占用率
- msxml3.dll 错误 '80072efd' ---asp 网站报错
- vs2017 错误:当前页面的脚本发生错误
- WD移动硬盘无法存储,提示空间不够(已解决)——当移动硬盘遇到坚果云
- win7默认网关不可用怎么修复 win7默认网关不可用的快速解决方法
- 10bit色深灰度图彩色图加载显示
- 10bit视频是什么?
- 解决使用Keil5不能生成bin文件或生成的是.bin文件夹问题