概述
- 中介者模式是封装一系列的对象交互的成熟模式,其关键是将对象之间的交互封装在称作中介者的对象中,中介者使各对象不需要显示地相互引用,这些对象只包含中介者的引用。
- 当系统中某个对象需要和系统中另外一个对象交互是,只需要将自己的请求通知中介者即可。
中介者模式的结构
中介者模式的结构中包括四种角色。
- 中介者(Mediator)
- 具体中介者(ConcreteMediator)
- 同事(Colleague)
- 具体同事(ConcreteColleague)
中介者(Mediator)
- 中介者是一个接口。
- 该接口定义了用于同事(Colleague)对象之间进行通信的方法。
具体中介者(ConcreteMediator)
- 具体中介者是实现中介者接口的类。
- 具体中介者需要包含所有具体同事(ConcreteColleague)的引用,并通过实现中介者接口中的方法来满足具体同事之间的通信请求。
同事(Colleague)
- 一个接口。
- 规定了具体同事需要事先的方法。
具体同事(ConcreteColleague)
- 实现同事接口的类。
- 具体同事需要包含具体中介者的引用,一个具体同事需要和其他具体同事交互时,只需将自己的请求通知给它所包含的具体中介者即可。
中介者模式的优点
- 可以避免许多的对象为了之间的通信而相互显示引用,否则,不仅系统难于维护,而且也使其他系统难以复用这些对象。
- 可以通过中介者将原本分布于多个对象之间的交互行为集中在一起。当这些对象之间需要改变之间的通信行为时,只需使用一个具体中介者即可,不必修改各个具体同事的代码,即这些同事可被重用。
- 具体中介者使得各个具体同事完全解耦,修改任何一个具体同事的代码不会影响到其他同事。
- 具体中介者集中了同事之间是如何交互的细节,使系统比较清楚地知道整个系统中的同事是如何交互的。
- 当一些对象相互通信,但又无法相互包含对方的引用,那么使用中介者模式就可以使这些对象相互通信。
适合使用中介者模式的情景
- 许多对象以复杂的方式交互,所导致的依赖关系使系统难以理解和维护。
- 一个对象引用其他很多对象,导致难以复用该对象。
注
- 如果仅仅需要一个具体中介者,模式中的中介者接口可以省略。
- 由于具体中介者集中了同事之间是如何交互的细节,可能使具体中介者变得非常复杂,增加了维护的难度。