✨模式类型✨✨ | ✨✨难度✨ ✨ | ✨✨实用性✨✨ | ✨✨重要程度✨✨ | ✨✨经典性✨✨ | ✨✨历史性✨ |
---|---|---|---|---|---|
行为型模式 | ★★★★ ⬇️ | ★★★ ⬆️ | ★★★ ⬆️ | 💚 ⬆️ | 💚 ⬆️ |
中介者模式(Mediator Pattern
)是指用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
中介者模式名字跟出国留学中介和房产中介是类似的。拿房产中介来说,现在房子买家和房子卖家非常多,如果任由房子买家和房子卖家自由交易,则会导致不同的买家和卖家之间有很多交互,一个买家会和多个卖家进行交涉,同样的一个卖家也会和多个买家进行交涉。如果在买房的过程中出现纠纷问题,则很难进行解决。
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
当多个类相互耦合,形成了网状结构。此时可以采用中介者模式解决网状结构分离为星型结构。
中介者模式将错综复杂的交错交互方式,调整为星状的交互方式,所有交互节点都通过中介者进行通信,由中介者进行转换通信动作,已达到各交互节点的相互调用。
Mediator
:抽象中介者,定义了同事对象到中介者对象的接口,用于联通哥哥同事对象进行相互通信衔接。ConcreteMediator
:具体中介者,它从具体的同事对象接收消息,向具体同事发出命令。Colleague
:抽象同事类,定义了中介者对象接口,它只知道中介者而不知道其他同事对象。ConcreteColleague
:具体同事类,每个具体同事类都知道自己在小范围内的行为,而不知道它在大范围内的目的。
-
优点
- 简化了对象之间的交互,降低了类的复杂度,将一对多转化成了一对一。
- 各个类之间的解耦。
- 减少子类生成。
- 可以简化各同事类的设计和实现。
- 符合迪米特原则。
-
缺点
- 在具体中介者类中包含了同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。
中介者模式的实现要点如下:
- 创建
Mediator
抽象中介者对象,完成抽象的接口定义,接口方法需要接受Colleague
对象,通过使用Colleague
完成最终的业务方法执行。 - 创建
ConcreteMediator
具体中介者,接收到ConcreteColleague
具体同事类,利用具体同事类发出调用命令执行业务方法。 - 创建
Colleague
抽象同事类,定义同事类需要完成的业务方法,接收Mediator
抽象中介者对象,通过将自己传递Mediator
完成给具体的业务方法调用。 - 创建
ConcreteColleague
具体同事类,完成Colleague
抽象同事类的方法,调用接口业务方法的调用。
中介者模式适用于:
- 一组对象以明确但复杂的方式进行通信。由此产生的相互依赖性是非结构化的,难以理解。
- 重用对象很困难,因为它引用并与许多其他对象通信。
- 在几个类之间分配的行为应该是可自定义的,而不需要很多子类。
- 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
- 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
- All scheduleXXX() methods of java.util.Timer
- java.util.concurrent.Executor#execute()
- submit() and invokeXXX() methods of java.util.concurrent.ExecutorService
- scheduleXXX() methods of java.util.concurrent.ScheduledExecutorService
- java.lang.reflect.Method#invoke()
- 中介者模式是指用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
- 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。当多个类相互耦合,形成了网状结构。此时可以采用中介者模式解决网状结构分离为星型结构。
- 主要解决对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
- 中介者模式将错综复杂的交错交互方式,调整为星状的交互方式,所有交互节点都通过中介者进行通信,由中介者进行转换通信动作,已达到各交互节点的相互调用。
- 中介者模式优点:各个类之间的解耦、简化各同事类的设计和实现、降低了类的复杂度。