温馨提示:这篇文章已超过380天没有更新,请注意相关的内容是否还可用!
摘要:中介者模式是一种行为设计模式,旨在降低对象之间的耦合度。在这种模式中,中介者充当协调者,管理对象间的通信和交互。通过引入中介者,对象不再直接相互依赖,而是通过中介者传递消息或请求。这种模式有助于实现系统的灵活性和可维护性,特别是在处理复杂系统中的对象间交互时效果显著。
概念
中介者模式(Mediator Pattern)是一种对象行为型模式,该模式的主要目的是定义一个中介对象,以封装一系列对象之间的交互,使原有对象之间的耦合变得松散,并且可以独立地改变它们之间的交互。
原理结构图
抽象中介者(Mediator)这是中介者模式的核心接口,它定义了同事对象注册和信息转发的抽象方法,这个角色的主要职责是声明并规范中介者的操作,以便具体中介者能够实现这些操作来协调同事对象之间的交互。
具体中介者(Concrete Mediator)这个角色实现了抽象中介者接口,并具体定义了一个管理同事对象的列表,它负责协调各个同事角色之间的交互关系,因此依赖于同事角色。
抽象同事类(Colleague)这个角色定义了同事类的接口,它包含了保存中介者对象的方法和提供同事对象交互的抽象方法,这个角色的目的是实现所有相互影响的同事类的公共功能。
具体同事类(Concrete Colleague)这是抽象同事类的实现者,当具体同事类需要与其他同事对象交互时,它会通过中介者对象来进行后续的交互,而不是直接与其他同事对象通信。
代码示例
示例1:聊天室系统
在这个场景中,每个用户(客户端)都可以看作是一个同事类,而聊天室服务器则充当中介者的角色,用户之间不需要直接通信,而是通过服务器来转发消息。
示例2:智能家居系统
在智能家居系统中,中介者模式可以应用于管理各种智能设备之间的交互,这些设备可能包括灯光、空调、电视、窗帘等,每个设备都作为同事类,而智能家居中心或服务器则作为中介者,负责协调和管理设备之间的通信和交互。
优缺点
主要作用
降低对象之间的耦合性,并简化它们之间的通信。
优点
实现解耦合各个对象不再直接相互依赖,而只依赖于中介者,这显著降低了类之间的耦合性。
简化交互中介者模式简化了对象之间的交互过程,将复杂的交互逻辑封装在中介者内部,使得代码更加清晰和易于理解。
可扩展性中介者模式使得系统更加易于扩展,当需要添加新的对象或新的交互关系时,只需要修改中介者的代码,而无需修改其他对象的代码。
统一控制中介者实现了对交互关系的统一控制,确保交互的正确性和一致性。
缺点
中介者可能变得过于复杂随着系统中同事类数量的增加,中介者需要管理的交互关系也会变得更为复杂。
可能导致系统性能下降由于所有对象间的交互都需要通过中介者进行,当交互频繁或涉及大量数据时,中介者可能成为性能瓶颈。
降低了系统的透明度由于交互逻辑被封装在中介者内部,外部对象无法直接了解其他对象的交互细节。
对中介者的依赖性强同事类依赖于中介者进行交互,如果中介者出现问题,整个系统可能受到影响。
应用场景
应用场景
对象关系复杂当系统中的对象之间存在复杂的引用关系时,引入中介者可以简化这些关系。
行为变更频繁如果系统需要频繁地改变对象间的交互行为,可以通过增加新的中介者类来实现。
多人交互场景如多人聊天室,一个人发言需要传达给每个人时,使用中介者模式可以减少个体之间的直接交互。
系统解耦要求高在需要降低对象间直接依赖、提高系统模块独立性的情况下,中介者模式是一个很好的选择。
复杂系统设计对于复杂的系统如GUI系统、企业应用程序等,使用中介者模式可以使系统更易于维护和扩展,实际应用包括聊天室系统、微服务架构、智能家居系统、多人游戏等。
JDK中的使用:java.util.Timer 类
java.util.Timer 类中的中介者角色与同事类角色:Timer 类作为中介者角色负责注册任务(通过schedule方法)和取消任务的方法;TimerTask 或其他实现 Runnable 接口的类作为同事类角色负责定时执行的任务逻辑,Timer内部维护了一个任务队列并按照指定的时间间隔或延迟执行这些任务,同事类通过调用Timer类的schedule方法将自己注册到中介者中并指定执行的时间和周期一旦注册成功它们就不再需要直接与其他任务进行交互而是依赖于Timer中介者来管理和调度它们的执行,注意事项包括避免过度集中控制保持中介者的简洁性适时重构性能考量以及扩展性设计等,此外中介者模式与组合模式有所不同前者主要用于简化对象间复杂交互后者主要用于处理组合对象与单个对象的层次结构问题。
还没有评论,来说两句吧...