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毫秒