中介者模式(Mediator)
2016-01-09 14:51
197 查看
一、中介者模式介绍
中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用。从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式核心:1.就是将网状结构处理成星型结构 2.将多对多处理成一对多
例如:世界上各个国家的和平和安全,沟通和交流等等问题,如果各个国家都可以互相交互的话,容易造成混乱,关系复杂。
这个时候联合国的作用就出现了,联合国作为一个中介对象来维护各个国家的和平和安全等等的工作。
中介者模式UML图:
例如:公司中如果没有部门经理,部门中的职员之间的工作沟通,职员和总监工作的沟通,职员和其他部门职员的沟通等等。会造成混乱,每个部门或者每个层级,都需要一个领导人来作为中介和其他组织的人沟通。
Colleague(抽象同事类):
ConcreteColleague(具体同事类):每个具体同事只知道自己的行为,而不了解其他同事类的情况,但他们都认识中介者对象。
Mediator(抽象中介者):定义了同事对象和中介者对象的接口
ConcreteMediator(具体中介者对象):实现抽象中介者的方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。
二、中介者模式代码实现
这里以公司各部门之间交互,使用中介者(总经理)的方式来代码实现。
首先定义一个抽象中介者(Mediator)对象:这里使用一个接口来定义
再定义一个抽象同事类(Colleague):仍然使用一个接口来定义
然后可以开始定义具体的实现了,先定义抽象同事的具体实现(ConcreteColleague)
研发部:
财务部:
市场部:
注意这里!!!
定义具体的中介者(ConcreteMediator):总经理
现在开始测试:
市场部需要向财务部发出申请,这时候就可以通过中介者(总经理)来向财务部发出申请了。而不是直接调用财务部的方法
输出结果:
市场部:正在跑市场......
市场部向总经理说:合同已搞定,需财务部报销.....
财务部:会计正在核对财务......
代码的UML图如下:
三、中介者模式总结
中介者模式的本质:解耦多个同事对象之间的交互关系,每个对象都持有中介者对象的引用。只跟中介者对象打交道。
通过中介者对象统一管理这些交互对象。
开发中常见应用场景:
MVC模式中的C部分,M和V都和它打交道
Java.lang.reflect.Method#invoke()
Java23种设计模式学习笔记【目录总贴】
参考资料:
大话设计模式(带目录完整版).pdf
HEAD_FIRST设计模式(中文版).pdf
尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】
中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用。从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式核心:1.就是将网状结构处理成星型结构 2.将多对多处理成一对多
例如:世界上各个国家的和平和安全,沟通和交流等等问题,如果各个国家都可以互相交互的话,容易造成混乱,关系复杂。
这个时候联合国的作用就出现了,联合国作为一个中介对象来维护各个国家的和平和安全等等的工作。
中介者模式UML图:
例如:公司中如果没有部门经理,部门中的职员之间的工作沟通,职员和总监工作的沟通,职员和其他部门职员的沟通等等。会造成混乱,每个部门或者每个层级,都需要一个领导人来作为中介和其他组织的人沟通。
Colleague(抽象同事类):
ConcreteColleague(具体同事类):每个具体同事只知道自己的行为,而不了解其他同事类的情况,但他们都认识中介者对象。
Mediator(抽象中介者):定义了同事对象和中介者对象的接口
ConcreteMediator(具体中介者对象):实现抽象中介者的方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。
二、中介者模式代码实现
这里以公司各部门之间交互,使用中介者(总经理)的方式来代码实现。
首先定义一个抽象中介者(Mediator)对象:这里使用一个接口来定义
研发部:
m.command(
"finacial"
); 这里通过总经理这个中介者对象,向财务部发出了申请。
通过中介者对象和财务部交互而没有直接跟财务部打交道
定义具体的中介者(ConcreteMediator):总经理
市场部需要向财务部发出申请,这时候就可以通过中介者(总经理)来向财务部发出申请了。而不是直接调用财务部的方法
市场部:正在跑市场......
市场部向总经理说:合同已搞定,需财务部报销.....
财务部:会计正在核对财务......
代码的UML图如下:
三、中介者模式总结
中介者模式的本质:解耦多个同事对象之间的交互关系,每个对象都持有中介者对象的引用。只跟中介者对象打交道。
通过中介者对象统一管理这些交互对象。
开发中常见应用场景:
MVC模式中的C部分,M和V都和它打交道
Java.lang.reflect.Method#invoke()
Java23种设计模式学习笔记【目录总贴】
参考资料:
大话设计模式(带目录完整版).pdf
HEAD_FIRST设计模式(中文版).pdf
尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】
相关文章推荐
- SQL-
- 开源安卓播放器:Dolphin Player 简单分析
- 华为机试——字符串加密
- 个人css常见问题总结
- 带查看原图功能的图像浏览器
- 开源安卓播放器:Dolphin Player 简单分析
- 命令模式(Command)
- 归档与反归档
- ssh信任,scp远程到本地不输密码
- 重拾编程之路--leetcode(java)--输出单独出现的数组元素(2)
- 编程易错点每日一记
- MIT 6.828 JOS学习笔记6. Appendix 1: 实模式(real mode)与保护模式(protected mode)
- 解释器模式(Interpreter)
- nginx负载均衡配置
- Android DES,AES,RSA加密实现
- react-native组件学习(二)
- 访问者模式(Visitor)
- 快速部署安装nagios
- 重拾编程之路--leetcode(java)--输出单独出现的数组元素(1)
- linux下rpm安装nginx