中介者模式
2016-02-08 18:34
183 查看
在软件系统中,特别是一些交互及系统中,常有互相之间包含复杂行为联系的大量对象。可以想象一下用过的许多桌面软件,常包含许多的功能模块和显示模块,用户产生一个行为时,多个模块可能都需要产生相应。
如果这些对象间都是直接的与相关的对象通信,那整个系统内的关联关系将会非常复杂,难以维护。而且耦合度很高,难以修改和扩展。如过能出现一位交警叔叔来作为这复杂的路面情况的指挥者就好了,终结者模式就是这种思想来解决这个问题。通过引入一个中介者,所有的对象都直接与他通信,而不是其他的不定量的对象。这将对象间的耦合度大大降低了,将复杂的多对多的网状结构简化成了一对多的星状结构。同时,将这些对象关系统一管理也便于维护、扩展。
中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
![](https://img-blog.csdn.net/20160208183337200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Mediator抽象中介者。
ConcreteMediator 具体中介者
Colleague 抽象业务类,包含抽象中介者类型的成员,以便交互
ConcreteColleague 具体业务类
上图是一个最简单的中介者模式的结构图。中介者通常可以起到两种作用:
中转作用:为业务对象间的交互传递消息,起到中转站的作用
协调控制作用:中介者可以作为一个对象间复杂关系的管理者,通过他的协调和对关系的封装,使系统中的复杂关系更加清晰、有条理。
总结:
优点:
降低对象间的耦合度
降低系统复杂度
提高可维护性
提高可扩展性,增加新业务类无需修改原有业务类。通过集成原有中介者,也可以无修改的扩展中介者。
缺点:
中介者可能职责过重,逻辑过于复杂,容易出错
适用场景:
系统中存在大量关系复杂的类
希望通过统一管理关系,简化关系模型同时提高扩展性
如果这些对象间都是直接的与相关的对象通信,那整个系统内的关联关系将会非常复杂,难以维护。而且耦合度很高,难以修改和扩展。如过能出现一位交警叔叔来作为这复杂的路面情况的指挥者就好了,终结者模式就是这种思想来解决这个问题。通过引入一个中介者,所有的对象都直接与他通信,而不是其他的不定量的对象。这将对象间的耦合度大大降低了,将复杂的多对多的网状结构简化成了一对多的星状结构。同时,将这些对象关系统一管理也便于维护、扩展。
中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
Mediator抽象中介者。
ConcreteMediator 具体中介者
Colleague 抽象业务类,包含抽象中介者类型的成员,以便交互
ConcreteColleague 具体业务类
上图是一个最简单的中介者模式的结构图。中介者通常可以起到两种作用:
中转作用:为业务对象间的交互传递消息,起到中转站的作用
协调控制作用:中介者可以作为一个对象间复杂关系的管理者,通过他的协调和对关系的封装,使系统中的复杂关系更加清晰、有条理。
总结:
优点:
降低对象间的耦合度
降低系统复杂度
提高可维护性
提高可扩展性,增加新业务类无需修改原有业务类。通过集成原有中介者,也可以无修改的扩展中介者。
缺点:
中介者可能职责过重,逻辑过于复杂,容易出错
适用场景:
系统中存在大量关系复杂的类
希望通过统一管理关系,简化关系模型同时提高扩展性
相关文章推荐
- QMessageBox 中的 OK 按钮改为中文“确定”
- linux 进程间通信 FIFO
- 使用MVVM构建一个简单的WPF应用
- 人的提升不是直线上升的,也不是一直弧线上升的(人之所以有文明就是因为不断的学习和积累好的东西)
- Python Requests爬虫——获取一个收藏夹下所有答案的图片
- QT显示机制(7篇相关文章)
- alertDialog示例
- js区分大小写
- QT update和repaint的区别
- 手把手教你安装QT集成开发环境(操作系统为ubuntu10.04)
- QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)
- 【小白的CFD之旅】02 江小白
- 命令集合
- Qt中Ui名字空间以及setupUi函数的原理和实现
- 关于身体健康的内心独白
- 《代码整洁之道》之三 函数
- TImage也有OnClick事件,可以当按钮使用,配上合适的图片(背景透明,效果前凸)更是几乎以假乱真
- 基础练习 字母图形 【水】
- 利用属性封装复杂的选项
- 2016第6周一春节