中介者模式C++实现

1定义

用一个中介对象封装一系列的对象交互,中介者使各个对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互

2类图

组成说明

Mediator抽象中介者角色,定义统一接口,用于各个同事角色之间的通信

ConcreteMediator具体中介者角色,通过协调各个同事角色实现协作行为,依赖于各个同事

Colleague同事角色,每个同事角色都应该知道中介的存在,且同事间通信一定是通过中介协作;同事行为分:自发行为,依赖行为。

3实现

class Mediator

{

protected:

  Mediator();

public:

  virtual ~Mediator()=0;

protected:

  ConcreteColleague1 c1;

  ConcreteColleague2 c2;

public:

  ConcreteColleague1 *getC1()

  {

    return c1;

  }

  ConcreteColleague2 *getC2()

  {

    return c2;

  }

  virtual void doSomething1() = 0;

  virtual void doSomething2() = 0;

};

//中介者

class ConcreteMediator:public Mediator

{

public:

  void doSomething1()

  {}

  void doSomething2()

  {}

};

class Colleague

{

public:

  Colleague(Mediator me)

  :mediator(me)

  {}

public:

  virtual ~Colleague()=0;

protected:

  Mediator mediator;

};

class ConcreteColleague1: public Colleague

{

public:

  ConcreteColleague1(Mediator me)

  :Colleague(me)

  {} 

  void Self_method1()

  {}

  //依赖方法

  void depMethod1()

  {

    //处理自己的业务

    //自己不能够处理的业务交给中介,让其进行通信协作

    mediator.doSomething2();

  }

};

class ConcreteColleague2: public Colleague

{

public:

  ConcreteColleague2(Mediator me)

  :Colleague(me)

  {}

  void Self_method2()

  {}

  //依赖方法

  void depMethod2()

  {

    //处理自己的业务

    //自己不能够处理的业务交给中介,让其进行通信协作

    mediator.doSomething2();

  }

};

注:同事类使用构造函数注入中介者,而中介者使用setter/getter注入同事类,因为同事类必须有中介者,而中介者只有部分同事类

4应用

①优点

减少类间依赖,把一对多的依赖转变成一对一。同事类只依赖中介,降低类间耦合

②缺点,中介者会随着同事类的增多,逻辑越来越复杂

5使用场景

简单但是不容易使用的一个模式。把握一个准则:当类图中出现蜘蛛网时,尝试使用中介者

实际应用:机场调度中心,MVC框架中的C(Controller),媒体网关,中介服务。

6提示-最佳使用

N个对象间产生依赖关系(N>2)

多个对象有依赖关系,但是尚不确定或者有发生改变的可能,使用中介者降低风险扩散

产品开发:eg MVC框架。把中介者模式应用到产品中,可以提升产品性能和扩展性,但是对项目就未必。项目是以支付投产为目标,而产品则是以稳定,高效扩展为宗旨。

设计模式--中介者模式C++实现的更多相关文章

  1. 7. 星际争霸之php设计模式--中介者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. JAVA 设计模式 中介者模式

    用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...

  3. 深入浅出设计模式——中介者模式(Mediator Pattern)

    模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...

  4. 设计模式--中介(Mediator)模式

    时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...

  5. C++设计模式——中介者模式

    前言 我们都知道,这个国际政治是一门很深的学问,不玩政治的人是搞不懂的.那么多的国家,国家之间的关系又及其复杂:就好比现在,美国和中国有经济利益关系,美国又和日本有盟友关系,朝鲜又和中国有说不清道不明 ...

  6. PHP设计模式 - 中介者模式

    中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改. 一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式.PHP中不 ...

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

    一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...

  8. C#设计模式-中介者模式

    在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...

  9. Java设计模式-中介者模式(Mediator)

    中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系 ...

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

    场景分析: 众所周知,电脑有很多组成部分,如硬盘.内存.光驱.音频.键盘等,各个组件之间协同工作才能保证电脑的正常运行. 如果各个组件之间直接交互,可能会比较复杂,如下图: 将上面的各个组件抽象成类, ...

随机推荐

  1. memcache服务端与客户端的安装部署

    1)安装memcached前需要先安装libevent [root@aliyun tools]# tar -zxf libevent-1.4.13-stable.tar.gz [root@aliyun ...

  2. JQuery EasyUI 扩展方法 日期控件 设置时间段函数

    /** Jquery扩展方法--by hgx 2018年1月8日-- * 设置时间段函数,开始时间(1号)与结束时间(当前日期) * 传入参数:--spaceMonth:查询间隔月,1为间隔查询一个月 ...

  3. 论文笔记:多标签学习综述(A review on multi-label learning algorithms)

    2014 TKDE(IEEE Transactions on Knowledge and Data Engineering) 张敏灵,周志华 简单介绍 传统监督学习主要是单标签学习,而现实生活中目标样 ...

  4. 异常信息 Exception

    void GetExceptionMsg(Exception ex, StringBuilder sb, string Prefix = "") { sb.AppendLine(P ...

  5. linux把软件安装到指定目录

    1.安装包带configure文件的: ./configure --prefix=安装目录 2.安装包不带configure文件,只带MakeFile 2.1 make install PREFIX= ...

  6. 20145216史婧瑶《Java 程序设计》第4周学习总结

    20145216 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 6.1 何谓继承 继承基本上就是避免多个类间重复定义共同行为. 在Java中,继承时使用exte ...

  7. 20144303 《Java程序设计》第九周学习总结

    20144303 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 一.JDBC入门: JDBC全名Java DataBase Connectivity,是java联机数据库 ...

  8. Swift日常开发随笔

    1.修改UISearchBar的搜索框底色 使用以下代码: setSearchFieldBackgroundImage(CommonUseClass._sharedManager.imageFromC ...

  9. .net 数据缓存(一)之介绍

    现在的业务系统越来复杂,大型门户网站内容越来越多,数据库的数据量也越来愈大,所以有了“大数据”这一概念的出现.但是我们都知道当数据库的数据量和访问过于频繁都会影响系统整体性能体验,特别是并发量高的系统 ...

  10. Ubuntu16.04多个版本GCC编译器的安装和切换【转】

    本文转载自:https://www.cnblogs.com/uestc-mm/p/7511063.html 这几天在配置交叉编译ARM开发板的linux内核的过程中碰到了很多问题,其中包括了GCC版本 ...