定义
中介者模式(Mediator Pattern):定义一个中介对象来封装一系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互。
模式结构
此处引用中介者模式的一段话。
- Mediator:抽象中介者。在里面定义各个同事之间交互需要的方法,可以是公共的通信方法,也可以是小范围的交互方法。
- ConcreteMeditor:具体中介者。它需要了解并维护各个同事对象,并负责具体的协调各同事对象的交互关系。
- 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
- Colleague:抽象同事类,主要约束同事对象的类型,并实现一些具体同事类之间的公共功能,比如,每个具体同事类都应该知道中介者对象,也就是具体同事类都会持有中介者对象,都可以到这个类里面。
- ConcreteColleague:具体同事类,实现自己的业务,需要与其他同事通信时候,就与持有的中介者通信,中介者会负责与其他同事类交互。
优缺点
优点
- 松散耦合
- 集中控制交互
- 多对多变为一对多
缺点
- 过多集中化。中介者的复杂度会随同事对象的交互复杂度提高。
实际应用
为防止依赖的第三方组件库出现问题,可以通过中介者模式,松散系统与第三方UI库的耦合。通过“釜底抽薪”的模式,替换出问题的具体组件,或者逐步替换第三方组件。