中介者模式

  用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了中间者的角色,协调各方利益。

示例

  本文就以租房为例子,如果没有房屋中介,那么房客要自己找房东,而房东也要自己找房客,非常不方便。有了房屋中介机构就方便了,房东可以把要出租的房屋信息放到中介机构,而房客可以去中介机构咨询。

  在软件中,就是多个对象之间需要通信,如果没有中介,对象就需要知道其他对象,最坏情况下,可能需要知道所有其他对象,而有了中介对象就方便多了,对象只需与中介对象通信,而不用知道其他的对象。这就是中介者模式。

#include <iostream>
using namespace std;class Mediator;
//抽象人
class Person
{
protected:  Mediator *m_mediator; //中介
public:  virtual void SetMediator(Mediator *mediator){} //设置中介  virtual void SendMessage(string message) {}    //向中介发送信息  virtual void GetMessage(string message) {}     //从中介获取信息
};
//抽象中介机构
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); //房东收到信息  else  m_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("我想在南京路附近租套房子,价格800元一个月\n");  person2->SendMessage("出租房子:南京路100号,70平米,1000元一个月\n");  delete person1; delete person2; delete mediator;  return 0;
}  

参考:http://blog.csdn.net/wuzhekai1985

转载于:https://www.cnblogs.com/jeakeven/p/4967109.html

设计模式 -- (14)中介者模式相关推荐

  1. 走穿java23种设计模式--18中介者模式详解

    走穿java23种设计模式–18中介者模式详解 中介者模式也称调停者模式,是一种比较简单的模式. 一.中介者模式的现实场景 蔡良因为上次表白时对方只看重他的物质方面,所以他对女朋友这个问题有点失望.因 ...

  2. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:webabcd 介绍 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互 ...

  3. 设计模式(中介者模式-对象去耦)

    声明:本系列文章内容摘自<iOS设计模式> 中介者模式 用一个对象来封装一系列对象的交互方式.中介者使个对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 何时 ...

  4. Java设计模式之中介者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  5. 软件设计模式之中介者模式实验

    软件设计模式之中介者模式实验 一.实验目的 掌握软件设计模式中的中介者模式,能够用中介者模式编写程序,解决实际问题. 二.实验内容与要求 内容:有个租房中介为房主和租赁人提供租房服务,请用中介者模式对 ...

  6. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. 设计模式之中介者模式---Mediator Pattern

    模式的定义 中介者模式定义如下: Define an object that encapsulates how a set of objects interact.Mediator promotes ...

  8. 设计模式复习-中介者模式

    #pragma once #include "stdafx.h" #include<map> #include<set> #include<strin ...

  9. 【设计模式】中介者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.中介者模式简介 二.中介者模式适用场景 三.中介者模式优缺点 四.中介者模式 与 观察者模式 五.中介者模式 代码示例 1.聊天室 2.用户 3.运行实例 一.中介者模式简介 中介者模式 ...

  10. 再起航,我的学习笔记之JavaScript设计模式23(中介者模式)

    中介者模式 概念介绍 中介者模式(Mediator):通过中介者对象封装一系列对象之间的交互,使对象之间不再相互引用降低他们之间的耦合,有时中介者对象也可以改变对象之间的交互. 创建一个中介 中介者模 ...

最新文章

  1. Msxml2.XMLHTTP Microsoft.XMLHTTP new XMLHttpRequest
  2. 青蛙捉昆虫的html游戏,幼儿园小班体育游戏教案《小青蛙捉害虫》
  3. Linux查看某个进程的线程
  4. Yunyang tensorflow-yolov3 voc_train.txt以及voc_test.txt引用的路径位置
  5. mysql标准化存储结构_Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql...
  6. linux内核printk调试手段,[Mini2440] 内核调试手段之 printk
  7. snmp服务 2003 镜像_美国掌握全球70%根服务器,一旦对中国关闭,我们将无法上网?...
  8. mysql导出csv格式去除字段中的\n\r
  9. 当前目录未找到系统,请尝试选择更深层的目录再次搜索解决方法
  10. vue怎么编辑已有视频_vue如何编辑视频 vue编辑视频方法
  11. 聊聊nacos server的PushService
  12. python 等值面_ANSYS Fluent快速添加等值面/等值线 源代码-教育代码类资源
  13. 泡泡代码c语言,重发一次,带注释的泡泡模拟程序!
  14. Codecademy-网站编程开发学习网站
  15. html炫酷的表格插件,pickout-纯JS炫酷下拉列表框美化插件
  16. 数据分析基础——基本运算
  17. 知名互联网公司都在使用哪些数据库
  18. nao机器人学习笔记3
  19. 详解电容触控芯片与指纹芯片的研发与生产流程
  20. 致程序员之家论坛的所有会员

热门文章

  1. 深入理解JVM内存区域与内存分配
  2. 你真的会使用XMLHttpRequest吗?
  3. 老男孩Linux学习 -- 关于添加第二块磁盘的那些事
  4. Java Enum 枚举
  5. USACO翻译:USACO 2014 FEB SILVER 三题
  6. Redis整合Spring结合使用缓存实例
  7. Python矩阵处理库—Numpy库的基本使用
  8. 操作系统页面置换算法
  9. javascript第一天
  10. 【洛谷4005】小Y和地铁(搜索)