意图:用一个中介者对象封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而减小耦合。

原文:默默的EEer

地址:http://www.cnblogs.com/hebaichuanyeah/p/6091506.html

实际就是指,利用一个中介者对象来连接两个对象的操作。例如需求是,A对象更新/改变了,B对象也跟着相应的更新/改变,不通过直接调用B对象

一个例子,详见注释

#include <iostream>using namespace std;class Colleague;//定义一个中介者接口,包含对象改变所需调用函数。
class Mediator
{
public :virtual ~Mediator(){}virtual void changed(Colleague *)=0;};//定义"同事"类接口,初始化需要一个中介者对象,并通过该类更新另外一个"同事"
class Colleague
{
public ://初始化中介者类对象Colleague(Mediator * mediator){this->mediator =mediator;}//更新另外一个类virtual void changed(){mediator->changed(this);}
private:Mediator *mediator;
};//具体的同事类1
class ConcreteColleague1 :public Colleague
{
public:ConcreteColleague1(Mediator * mediator):Colleague(mediator){}void update(){cout<<"update ConcreteColleague1 from ConcreteColleague2"<<endl;}
};
//具体的同事类2
class ConcreteColleague2 :public Colleague
{
public :ConcreteColleague2(Mediator * mediator):Colleague(mediator){}void update(){cout<<"update ConcreteColleague2 from ConcreteColleague1"<<endl;}
};//具体的中介者类,实现更新函数changed。
class ConcreteMediator :public Mediator
{
private:ConcreteColleague1 * colleague1;ConcreteColleague2 * colleague2;
public:void setColleague1(ConcreteColleague1 * colleague){colleague1 = colleague;}void setColleague2(ConcreteColleague2 * colleague){colleague2 = colleague;}ConcreteMediator(){//colleague1 = new ConcreteColleague1(this);
}~ConcreteMediator(){}virtual void changed(Colleague* colleague){if(colleague == colleague1){colleague2->update();}else if(colleague == colleague2){colleague1->update();}else;}};
main()
{ConcreteMediator concreteMediator;ConcreteColleague1  colleague1(&concreteMediator);ConcreteColleague2  colleague2(&concreteMediator);concreteMediator.setColleague1(&colleague1);concreteMediator.setColleague2(&colleague2);//"同事1"通过中介者更新"同事2"
    colleague1.changed();//"同事2"通过中介者更新"同事1"
    colleague2.changed();}

转载于:https://www.cnblogs.com/hebaichuanyeah/p/6091506.html

[设计模式]8. C++与中介者模式(mediator pattern)相关推荐

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

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

  2. 设计模式-中介者模式(Mediator Pattern)

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

  3. PHP设计模式之中介者模式(Mediator Pattern)了解下

    咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互, ...

  4. java中介者模式例子_Java中介者模式(Mediator Pattern)

    本篇文章帮大家学习java中介者模式(Mediator Pattern),包含了Java中介者模式(Mediator Pattern)使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以 ...

  5. 7.7 中介者模式(Mediator Pattern)

    一. 定义 在现实生活中,常出现多个对象之间存在复杂的交互关系,这种交互关系常常是"网状结构",要求每个对象都必须知道它需要交互的对象.如:每个人必须记住他所有朋友的电话,若朋友中 ...

  6. [设计模式] 17 中介者模式 Mediator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...

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

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

  8. 设计模式之中介者模式(Mediator Pattern)

    中介者模式定义 Define an object that encapsulates how a set of objects interact. Mediator promotes loose co ...

  9. 【23种设计模式】中介者模式(Mediator Pattern) .Net Core实现

    文章目录 简介 伪代码演示 简单实现 使用MediatR实现中介者模式 来源 简介 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类 ...

最新文章

  1. 公开处刑:PapersWithCode上线“论文复现报告”,遏制耍流氓行为!
  2. EIGRP-2(EIGRP的路由认证)
  3. android原理揭秘系列之VacantCell缓存
  4. 为什么在EOS上的DApp对开发人员来说不盈利?
  5. 搭建MyBatis操作数据库
  6. 《追风行动》有点儿意思
  7. 基于反射机制的服务代理调用
  8. 20155225 2006-2007-2 《Java程序设计》第四周学习总结
  9. linux如何安装交叉工具链,Linux:制作mipsel 交叉工具链 (更新版)
  10. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 nacos
  11. CSL:圆形平滑标签的任意方向目标检测
  12. 十一. MySQL InnoDB 三大特性之 BufferPool
  13. Unity Json 编写及读取
  14. 44岁万达女高管跳楼:摧毁一个中年人有多容易!
  15. torch.sort()用法
  16. xftp本地同步到服务器文件夹,如何停止Xftp更新和同步浏览服务器?
  17. 前端头像上传功能实现之base64图片/头像上传 详细解析2【扩展知识FileReader对象】
  18. 【C++】(二) 类和对象的定义与使用
  19. c语言 存款利息计算,1000元,存5年,求五种方案存款五年后的本息和
  20. RabbitMQ学习笔记和AMQP协议浅析

热门文章

  1. 相对于硬件计算机软件就是,计算机的软件是将解决问题的方法,软件是相对于硬件来说的...
  2. javase哪部分最难_抖音拍哪方面的视频容易涨粉呢?抖音现在拍什么题材容易火?...
  3. 阿里云 Serverless 助力企业全面拥抱云原生
  4. oracle常用的监控,oracle常用性能监控及优化语句
  5. mc有什么红石机器人_mc:作为一个mc萌新应该掌握哪些基本功?还需要知道些什么?...
  6. 前端iframe 能指定本地网页吗_微前端的技术拆分方式
  7. jsonhandle主界面没有显示格式_怎么将图纸导出成图片格式保存
  8. 华北科技学院计算机系综合性实验,华北科技学院计算机系综合性实验.doc
  9. mysql1526错误_mysql 分区 1526错误
  10. VINS-Mono关键知识点总结——前端详解