设计模式 行为型
中介模式的主要目的是减少对象之间的直接交互,而是通过中介者对象来协调它们之间的交互。
目的作用
中介模式定义了一个单独的中介对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。
作用和中间层很像,通过增加中介这个中间层将对象之间多对多的关系改造成一对多的关系。解除对象之间的强依赖紧耦合的关系。
对象之间不再直接进行交互,而是通过中介对象中转一下。最小化对象之间的交互关系,降低乐代码的复杂度,提高了代码的可读性和可维护性。
改造后
现实比喻
类似航空管制。
塔台可以被视为中介对象,而飞机可以被视为需要协调交互的对象。飞机起飞或降落时,塔台需要协调多个飞机之间的交通,确保它们之间不会发生碰撞或其他事故。
塔台会通过收集和处理每个飞机的相关信息,例如它们的位置、速度和方向等,来决定哪个飞机应该起飞或降落,以及它们应该采取什么行动。
在这个过程中,飞机不直接相互通信,而是通过塔台来进行协调。塔台拥有对所有飞机的引用,并负责协调它们之间的交互,从而保证了航空领域的安全和顺畅。
回归到日常业务中,用不用中介模式的区别就在于 原本业务逻辑会分散在各个控件中,现在都集中到了中介对象中。虽然简化了控件之间的交互,但是可能会使中介对象变成庞大复杂的“上帝类”。所以,在使用中介模式的时候,我们要根据实际的情况,平衡对象之间交互的复杂度和中介类本身的复杂度。
代码实现
案例 1
改造后
案例 2
改造后
适用场景
适用于需要协调和控制多个对象之间的复杂交互的场景。
通过将交互逻辑封装在中介者对象中,可以更好地控制对象之间的耦合度,从而提高系统的可维护性和可扩展性。
场景关键词举例:
- 简化对象之间的耦合关系
- 当一个对象需要协调多个其他对象之间的交互时
- 当一个对象需要向多个对象发送通知或消息时
- 当一个对象需要与多个对象进行交互,并且这些对象的数量和类型不固定时
- 当一个对象需要与其他对象进行交互,并且这些对象都需要知道该对象的状态或行为时
与其他设计模式的区别
中介模式与观察者模式的区别
中介模式和观察者模式都是用来协调多个对象之间的交互,但实现方式不同。 中介模式中,所有对象都是和中介者对象交互,而中介者对象负责将信息传递给其他对象; 而观察者模式中,被观察对象与观察者对象之间是直接交互的,被观察对象负责将信息通知给观察者对象。
在观察者模式的应用场景中,参与者之间的交互关系比较有条理,而中介模式正好相反。 只有当参与者之间的交互关系错综复杂,维护成本很高的时候,我们才考虑使用中介模式。 除此之外,如果一个参与者状态的改变,其他参与者执行的操作有一定先后顺序的要求。这个时候中介模式就可以利用中介类,通过先后调用不同参与者的方法,来实现顺序的控制,而观察者模式是无法实现这样的顺序要求的。
中介模式与适配器模式的区别
中介模式和适配器模式都是用来解决对象之间的兼容性问题,但它们的解决方式不同。中介模式中,中介者对象负责将不同对象之间的接口进行转换,使它们能够相互协作;而适配器模式中,适配器对象负责将一个对象的接口转换成另一个对象所期望的接口。
中介模式与装饰器模式的区别
中介模式和装饰器模式都是用来扩展对象的功能,但它们的扩展方式不同。中介模式中,中介者对象通过协调对象之间的交互来扩展对象的功能;而装饰器模式中,装饰器对象通过包装其他对象来扩展对象的功能。
中介模式与代理模式的区别
中介模式和代理模式都是用来控制对象之间的访问,但它们的控制方式不同。中介模式中,中介者对象负责控制对象之间的交互,从而控制对象的访问;而代理模式中,代理对象负责控制对实际对象的访问,从而控制对象的访问。