中介者(Mediator)模式

图1-1展示了一个具体的实际场景,某一个购物网站,只有四个网页。由于网页之间可以进行跳跃,比如当前在“Welcome”页面,你点击某个超链接可以跳转到“Store”页面。那么,这就有一个问题,每个页面必须包含能够跳转到其他页面的代码,而这些代码很可能是重复性的,比如“Welcome”和“Goodbye”页面都包含能够跳转到“Store”的代码。

对于这个问题,可以通过中介者模式来解决:使用一个中介者对象来包含所有的页面跳转间的代码。每个页面只需要将是否进行跳转的状态告诉中介者对象,而页面之间的跳转工作则交给中介者对象来进行。看下图1-2:

中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,在本例中中介对象将跳转代码和具体的页面内容进行了分离,减少了页面之间的耦合性,如果以后网站增加了一些页面,我们也只需修改中介者对象,而无需修改现有的页面内容。

那么哪些情况适合使用中介者模式呢?

  • 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。

  • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

  • 想定制一个分布在多个类中的行为,而又不想生成太多的子类。


书籍推荐