设计模式--中介者模式C++实现
中介者模式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++实现的更多相关文章
- 7. 星际争霸之php设计模式--中介者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA 设计模式 中介者模式
用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...
- 深入浅出设计模式——中介者模式(Mediator Pattern)
模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...
- 设计模式--中介(Mediator)模式
时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...
- C++设计模式——中介者模式
前言 我们都知道,这个国际政治是一门很深的学问,不玩政治的人是搞不懂的.那么多的国家,国家之间的关系又及其复杂:就好比现在,美国和中国有经济利益关系,美国又和日本有盟友关系,朝鲜又和中国有说不清道不明 ...
- PHP设计模式 - 中介者模式
中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改. 一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式.PHP中不 ...
- 23种设计模式--中介者模式-Mediator Pattern
一.中介者模式的介绍 中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...
- C#设计模式-中介者模式
在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...
- Java设计模式-中介者模式(Mediator)
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系 ...
- 设计模式-中介者模式(Mediator)
场景分析: 众所周知,电脑有很多组成部分,如硬盘.内存.光驱.音频.键盘等,各个组件之间协同工作才能保证电脑的正常运行. 如果各个组件之间直接交互,可能会比较复杂,如下图: 将上面的各个组件抽象成类, ...
随机推荐
- 通过进程名称删除进程 ps -ef
删除进程名为udpserver的进程. kill -9 $(ps -ef|grep udpserver | grep java|awk '{print $2}' ). 1.通过进程名取得进程号: ps ...
- PAT 1151 LCA in a Binary Tree[难][二叉树]
1151 LCA in a Binary Tree (30 分) The lowest common ancestor (LCA) of two nodes U and V in a tree is ...
- 模块讲解----json与pickle模块的区别
1.在生产中,dumps和loads只进行一次,而且要用w把原来的数据冲掉,从而保证每次都是最新的. 2.虚拟机的快照,是每个快照都有一个文件,而不是全都不放在一起. 3.如果想生产好几个序列化,就生 ...
- 数据库连接池libzdb
官网:http://www.tildeslash.com/libzdb/ A small, easy to use Open Source Database Connection Pool Libra ...
- 工作笔记——web字体格式转换
转载自:http://blog.csdn.net/xiaolongtotop/article/details/8316554 目前,文字信息仍是网站最主要的内容,随着CSS3技术的不断成熟,Web字体 ...
- Java基础知识陷阱系列
Java基础知识陷阱系列 今天抽空把Java基础知识陷阱有关的文章汇总于此,便于大家查看. Java基础知识陷阱(一) Java基础知识陷阱(二) Java基础知识陷阱(三) Java基础知识陷阱(四 ...
- Winter-2-STL-A Argus 解题报告及测试数据
Time Limit:2000MS Memory Limit:65536KB Description A data stream is a real-time, continuous, ord ...
- Linux中LVM2原理
一.LVM原理 [MD]:Multi Device 多设备 Mdadm是一个用户空间工具,是RAID的管理工具,与真正的RAID工作没有太大关系.真正的RAID集成在linux内核中 [DM]Devi ...
- 清除list或者map集合,减少内存的占用率
1.在编写程序对数据处理的时候我们经常会使用到list和map集合,有些时候我们存到集合里的数据只是暂时性的,在验证完或者使用完之后尽量对list或者map清空,及list.clear()后者map. ...
- React 常用插件库
js 加密 crypto-js (des加密,md5) crypto-js https://www.npmjs.com/package/crypto-js Mock联调 数据是前端开发过程中必不可少的 ...