Programming 版 (精华区)
发信人: Sun (大灯泡), 信区: SoftEng
标 题: [Design Pattern] Mediator
发信站: 哈工大紫丁香 (2001年04月13日16:48:03 星期五), 站内信件
发信人:Crystal_Y (小衲) 版面名称:SoftEng(1068)
标 题:[Design Pattern] Mediator
发信站:中国科大BBS站 (Wed, 11 Apr 2001 13:25:40 )
标 记:精华
Mediator把多对多变成一对多,目的还是为了松散耦合
OO设计把系统所要实现的功能,根据系统的结构特征,分布到了组成系统的
各个对象中去,这样会产生objects之间的interconnection。划分越细,这样
的interconnection越多,举例来说就是某个对象对另一个对象的getXXX和setXXX
这样的调用。系统的行为特征依赖于内部对象之间的协作,如果这样的协作变得
非常紧密,导致系统功能的轻微变化会导致内部对象之间关系的重大改变,这
就很不好了。
同时,对于内部某个对象而言,reuse它也是很费劲的,因为它会和其它的
对象打交道,何况其它对象的数目、类型统统不能确定。
总而言之,一个小小的对象,如一个按钮,它可能是从已有的对象复用而来,
具有按钮的一些基本属性,显示、标题、事件等等,或者它将来也有可能被复用
以扩展一些属性。当它被放入一个系统之中,它必然要和系统中的其它对象进行
通讯,协作完成系统需要的功能。我们希望按钮的基本属性啊什么的,不要和它
在某个特定系统中与其它对象的interconnection混在一起。
那么Mediator出来负责一个系统内对象间的interconnection,那些对象
(Colleague)现在只和Mediator打交道,方式有两种:
Mediator完全地了解这个系统的结构,承担全部的协调工作,有一个
相对复杂的机制来根据系统内不同Colleague的变化去触发其它Colleague的动
作,这样的Mediator实现起来比较直观,但它是一个Monolith,系统越大,
它越复杂。
采用Observer模式,它是用来处理一对多的好东西,这里Mediator的实例
被称为ChangeManager,一个Colleague发生变化了,它notify这个manager,
manager维护一个映射机制,使得可以找到需要了解这个变化的其它Colleague,
然后通知它们。这个映射机制是通过Register和Unregister来维护的。
Register和Unregister实际上是提供两个对象间联系的一个pattern,我对
松散耦合的了解就是从它开始的呵呵。
--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
--
太阳当空照,灯泡呵呵笑,
mm说,早上好,你为什么又不理我了?
我要做光光,光光没烦恼,
高高跳,大声叫,光光的乐趣你们不知道!
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.716毫秒