首页 . 理学 . 计算机科学技术 . 软件工程 . 软件工程理论与方法 . 软件设计 . 设计模式

中介者模式

/mediator pattern/
条目作者林荣恒

林荣恒

最后更新 2022-12-23
浏览 110
最后更新 2022-12-23
浏览 110
0 意见反馈 条目引用

用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象,以有利于维护和修改的一种设计模式。

英文名称
mediator pattern
所属学科
计算机科学技术

简单地说,中介者模式就是将原来两个直接引用或者相互依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象相互引用或者与“中介”对象建立依赖。当然并不是所有的对象交互都需要通过“中介”对象。如果对象之间的关系已经一目了然,引入中介对象便是“画蛇添足”。

中介者模式的组成部分:①抽象中介(Mediator)角色。抽象中介角色定义统一的接口用于各伙伴角色之间的通信。②具体中介(Concrete Mediator)角色。具体中介角色通过协调各伙伴角色实现协作行为。为此它要知道并引用各个伙伴角色。③ 伙伴(Colleague)角色。每一个伙伴角色都知道对应的具体中介角色,而且与其他的伙伴角色通信的时候,一定要通过中介角色协作。

中介者模式的类图见图。

中介者模式的类图中介者模式的类图

在模型-视图-控制器模式(MVC)包括模型层(Model)、表现层(View)、控制层(Control)。控制层便是位于表现层与模型层之间的中介者。笼统地说,MVC是中介者模式在框架设计中的一个应用。由于中介者模式在定义上比较松散,在结构上和观察者模式、命令模式十分相像,而应用目的又与结构模式“门面模式”有些相似。在结构上,中介者模式与观察者模式、命令模式都添加了中间对象——只是中介去掉了后两者在行为上的方向。但是观察者模式、命令模式中的观察者、命令都是被客户所知的,具体哪个观察者、命令的应用都是由客户来指定的,而大多中介者角色对于客户程序却是透明的。造成这种区别的原因是由于它们要达到的目的不同。从目的上看,中介者模式与观察者模式、命令模式没有任何关系,却与门面模式有些相似。

在面向对象编程中,一个类必然会与其他的类发生依赖关系,完全独立的类是没有意义的。一个类同时依赖多个类的情况也相当普遍。存在这样的情况,说明一对多的依赖关系有它的合理性,适当的使用中介者模式可以使原本凌乱的对象关系清晰,但是如果滥用,则可能会带来相反的效果。一般来说,只有对于那种伙伴类之间是网状结构的关系,才会考虑使用中介者模式。可以将网状结构变为星状结构,使伙伴类之间的关系变的清晰一些。

中介者模式是一种比较常用的模式,也是一种比较容易被滥用的模式。对于大多数的情况,伙伴类之间的关系不会复杂到混乱不堪的网状结构,因此,大多数情况下,将对象间的依赖关系封装到伙伴类内部就可以的,并不一定要引入中介者模式。滥用中介者模式,只会让事情变得更复杂。

中介者模式的优缺点:①适当地使用中介者模式可以避免伙伴类之间的过度耦合,使得各伙伴类之间可以相对独立地使用。②使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使伙伴间的关系易于理解和维护。③使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。

相关条目

阅读历史

    意见反馈

    提 交

    感谢您的反馈

    我们会尽快处理您的反馈!
    您可以进入个人中心的反馈栏目查看反馈详情。
    谢谢!