中介者模式,调停者模式

问题:

  不同对象间需要知道其他对象的。

  将一个系统分隔成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性。

  大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分隔的整体。所以,对系统的行为进行任何较大的改动就十分困难了。

  

解决:

  通过中介对象,可以将系统的网状结构变成以中介者为中心的星形结构。

  每个具体对象不再通过直接的联系与另一个对象发生相互作用,而是通过“中介者”对象与另一个对象发生相互作用。

  中介者对象的设计,使得系统的结构不会因为新对象的引入造成大量的修改工作。

  例如,.NET的windows应用程序中的Form或web网站应用程序的aspx(控件之间的通信,都是通过form窗体代码完成),form窗体就是中介,操作各个对象。

  

定义:

  用一个中介对象来封装一系列的对象交互。

  中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

优点:

  Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变、复用各个Colleague类、Mediator。(任何国家的改变不会影响到其他国家,而只是与安理会发生变化)。

  把对象间如何协作进行了抽象,将终结作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转义到它们之间的交互上来。即,站在一个更宏观的角度去看待系统。(对象间行为,狭隘;中介者,更加全面,宏观)

缺点:

  具体中介者类ConcreteMediator可能会因为ConcreteColleague越来越多,而变得非常复杂,反而不容易维护了。

  即,ConcreteMediator控制的集中化,交互复杂性变为了中介者的复杂性,使得中介者会变得比任何一个ConcreteColleague都复杂。

中介者模式的优点来自于集中控制,缺点也是它,使用前需考虑清楚。(关键在于,ConcreteMediator,必须要知道所有的ConcreteColleague。减少了ConcreteColleague类之间的耦合,但是使得ConcreteMediator责任过多,如果它除了问题,整个系统都会有问题了。)

注意:

  中介者模式很容易在系统中应用,也很容易在系统中误用。

  当系统中出现了“多对多”交互负载的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。

应用:

  1.一组对象(以定义良好但是复杂的方式)进行通信的场合。

  2.想定制一个分布在多个类中的行为,而不想生成太多的子类的场合。  

结构图: 

  Mediator

  

  Colleague

  

  ConcreteMediator

  

  ConcreteColleague,只知道自己的行为,不了解其他同事类的情况。但它们却都认识中介者对象。

  

  

  客户端:

  

  ConcreteColleague间发送、接收消息,其实是通过中介者来完成的,减少了它们间的耦合度。

  注意:

  如果不存在扩展的情况,Mediator可以与ConcreteMediator合二为一。

  联合国包括案例为、国际劳工组织、教科文组织……,因此Mediator、ConcreteMediator需分开写。

示例:

  

  

  

  

  

  

  

  客户端:

  

  结果:

  

  

  

扩展:

  迪米特法则:

  如果两个类不必直接通信,那么这两个类就不应当发生直接的相互作用。

  如果其中一个类需要调用另一个类的某一方法的话,可以通过这个第三者转发这个调用。

  

时间: 2024-10-06 20:56:04

中介者模式,调停者模式的相关文章

设计模式——中介者模式/调停者模式(C++实现)

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Colleague; 7 8 class Mediator 9 { 10 public: 11 virtual void Send(string strMessage, Colleague* pstColleague) = 0; 12 }; 13 14 class Colleague 15 { 16 public: 17 Coll

调停者模式

调停者模式 调停者模式是对象的行为模式,调停者模式包装了一系列对象相互作用的方式,使得这些对象不必明显引用.从而他们之间的耦合度就会降低,调停者模式类似于电脑的主板和各个组件的交互.        调停者模式包括以下角色:       ●      抽象调停者(Mediator)角色:定义出同事对象到调停者对象的接口,其中主要方法是一个(或多个)事件方法. ● 具体调停者(ConcreteMediator)角色:实现了抽象调停者所声明的事件方法.具体调停者知晓所有的具体同事类,并负责具体的协调各

java设计模式9.备忘录模式、访问者模式、调停者模式

备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态,备忘录模式常与命令模式和迭代子模式一起使用. 访问者模式 访问者的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变.访问者模式使适用于数据结构相对未定的系统,它把数据结构和作用于结构之上的操作解耦. 抽象访问者角色

《JAVA与模式》之调停者模式

调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用.从而保证这些相互作用可以彼此独立地变化. 为什么需要调停者 如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象.这些同事对象通过彼此的相互作用形成系统的行为.从图中可以看出,几乎每一个对象都需要与其他的

JAVA设计模式之调停者模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用.从而保证这些相互作用可以彼此独立地变化. 为什么需要调停者 如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象.这

Java设计模式之《调停者模式》及应用场景

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6518603.html 调停者模式. 我们想象一下这样的场景:一个系统内部通过许多的类互相之间相互调用来完成一系列的功能,这个系统内部的每个类都会存在至少一次的调用与被调用,多者数不胜数,这种情况下,一旦某个类发生问题,进行修改,无疑会影响到所有调用它的类,甚至它调用的类,可见这种情况下,类与类之间的耦合性极高(体现为太多的复杂的直接引用). 这正是调停者模式的主场,调停者犹如第三方中介一

《Java设计模式》之调停者模式(Mediator)

调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们能够较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会马上影响到其它的一些对象之间的相互作用. 从而保证这些相互作用能够彼此独立地变化. 为什么须要调停者 例如以下图所看到的.这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此经常叫做同事(Colleague)对象.这些同事对象通过彼此的相互作用形成系统的行为.从图中能够看出.差点儿每个对象都须

设计模式_Mediator_调停者模式

形象例子: 四个MM打麻将,相互之间谁应该给谁多少钱算不清楚了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,俺得到了四个MM的电话.调停者模式: 调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.从而使他们可以松散偶合.当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用.保证这些作用可以彼此独立的变化.调停者模式将多对多的相互作用转化为一对多的相互作用.调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为

中介者(Mediator)模式

中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互 了解<迪米特法则>的朋友就知道,迪米特法则说的就是:一个对象应当对其它对象有尽可能少的了解 迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用性才可以提高. Mediator: 抽象中介者, 提供一个传递双方的方法 abstract void Send(string message, Colleague colleag

设计模式之解释器、调停者模式

解释器模式和调停者模式都是行为型模式,由于二者用的情形比较少,不作过多解读,介绍一下相关概念,以作参考. 解释器模式有点儿“编译器”的概念,像个超级简单的编译器,且跟硬件无关,它的目的是定义语言(使用规定格式和语法的代码)的文法,然后建立一个解释器来解释该语言中的句子. 在 GOF 的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子.这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题.而且当文法简单.效率不是关键问题的时候效