Java与模式笔记(28)

来源:互联网 发布:nginx视频防盗链 编辑:程序博客网 时间:2024/06/05 21:54

调停者(Mediator)模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

调停者模式结构与角色

 

抽象调停者(Mediator)角色:定义出同事对象到调停者对象的接口,其中主要的方法是一个(或者多个)时间方法。在有些情况下,这个抽象对象可以省略。这个角色通常由Java抽象类或Java对象实现。

具体调停者(ConcreteMediator)角色:从抽象调停者继承而来,实现了抽象超类所声明的事件方法。具体调停者知晓所有的具体同事类,它从具体同事对象接收消息,向具体同事对象发出命令。一般这个角色由一个具体的Java类实现。

抽象同事类(Colleague)角色:定义出调停者到同事对象的接口。同事对象只知道调停者而不知道其余的同时对象。一般此角色由一个Java抽象类或者Java对象实现。

具体同事类(ConcreteColleague)角色:所有的具体同事类均从抽象同事类继承而来。每一个具体同事类都很清楚它自己在小范围内的行为,而不知道它在大范围内的目的。一般此角色由一个具体Java类实现。

调停者模式的优点

1、  适当使用调停者模式可以较少使用静态的继承关系,使得具体同事类可以更加容易地被复用。

2、  适当使用调停者模式可以避免同事对象之间的过度耦合,使得调停类与同事类可以相对独立地演化。

3、  调停者模式将多对多的相互作用转化为一对多的相互作用,使得对象之间的关系更加易于维护和理解。

4、  调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。

调停者模式的缺点

1、  调停者模式降低了同事对象的复杂性,代价是增加了调停者类的复杂性。

2、  调停者类经常充满了各个具体同事类的关系协调代码,这种代码常常是不能复用的。因此,具体同事类的复用是以调停者类的不可复用为代价的。调停者模式为同事对象、而不是调停者对象提供了可扩展性,因此是一种倾斜的可扩展性。

调停者模式不应当在如下情况下使用

1、  不应当在责任划分混乱时使用。

不应当对“数据类”和“方法类”使用。