《Java设计模式及实践》—3.6 中介者模式
3.6 中介者模式
在许多情况下,当设计和开发软件应用程序时会遇到这样的场景,程序中有必须相互通信的模块和对象,最简单的实现方法是让它们彼此了解并直接发送消息。
但是,这种做法可能会造成混乱。例如,想象一个通信应用程序,程序中每个客户端必须连接到另一个客户端,那么客户端需要管理许多连接,这对于客户端来说其实并没有意义。更好的解决方案是让客户端都连接到中央服务器,让服务器管理客户端之间的通信。客户端将消息发送到服务器,服务器对客户端所有的连接都保持活动状态,并且可以向所有收件人广播消息。
另一个例子是需要一个专门的类来在图形界面中的不同控件之间扮演中介者,这些控件包括按钮、下拉列表和列表。例如,GUI中的图形控件可以保持对彼此的引用,以便相互调用它们的方法。但显然这么做会创建一段耦合度高的代码,其中每个控件都依赖于所有其他控件。更好的方法是在需要完成某些事情时让窗口负责向所有必需的控件广播消息。当控件中的某些内容修改时,它会通知窗口,该窗口将检查哪些控件需要通知,然后通知它们。
1.目的
中介者模式定义了一个对象,该对象封装了一组对象的交互方式,从而减少了它们之间的相互依赖。
2.实现
中介者模式基于两个抽象—Mediator和Colleague,如图3-7所示。
图 3-7
中介者模式依赖于以下类:
Mediator(抽象中介者):抽象中介者定义了参与者的交互方式。在此接口或抽象类中声明的操作与场景相关。
ConcreteMediator(具体中介者):它实现了中介者声明的操作。
Colleague(抽象同事角色):这是一个抽象类或接口,用于定义需要调解的参与者如何进行交互。
ConcreteColleague(具体同事角色):这是实现Colleague接口的具体类。
3.适用情况和示例
当有许多实体以类似的方式进行交互并且这些实体应该解耦时,就应该使用中介者模式。
在Java库中,中介者模式用于实现java.util.Timer。timer(计时器)类可用于调度线程以固定间隔运行一次或重复多次运行。线程对象对应于ConcreteColleague类。timer
类实现了管理后台任务执行的方法。
- 点赞
- 收藏
- 关注作者
评论(0)