一、什么是中介者模式
中介者模式(Mediator Pattern)是一种行为型设计模式,其核心思想是通过一个中介者对象来封装一系列对象之间的交互,使这些对象不需要相互显式引用。中介者模式提供了一个中介层,用以协调各个对象之间的通信,从而减少它们之间的耦合度。
二、中介者模式的角色
-
**抽象中介者(Mediator):**定义了同事对象用来与中介者通信的接口,规定了中介者必须实现的方法。其作用是声明并规范中介者的操作,以便具体中介者能够实现这些操作来协调同事对象之间的交互 。
-
具体中介者(ConcreteMediator):实现抽象中介者的接口,管理同事对象的引用,并根据具体的业务逻辑处理同事之间的交互 。
-
抽象同事类(Colleague):定义同事类的接口,包含一个保存中介者对象的引用的方法以及同事对象交互的抽象方法 ,也实现所有相互影响的同事类的公共功能 。
-
**具体同事类(Concrete Colleague):**实现了抽象同事类的接口,是真正参与到交互中的对象。当需要与其他同事对象交互时,会通过中介者对象来进行后续的交互,而不是直接与其他同事对象通信 。
三、中介者模式的典型应用
- 事件调度和监听器管理:在需要事件调度和监听器管理的系统中,中介者模式可以用来管理事件的注册、触发和分发。
四、中介者模式在**Timer中的应用
**
中介者模式在 java.util.Timer
类中的应用是一个典型的实例,其中 Timer
类充当中介者,而 TimerTask
任务则作为同事类。以下是详细的描述和代码示例:
-
抽象中介者(Mediator) :在
Timer
的上下文中,这个接口是由Timer
类实现的,它提供了一个接口,用于调度TimerTask
对象。 -
具体中介者(ConcreteMediator) :这是
Timer
类本身,它维护了一个任务队列(TaskQueue
),并使用一个内部的线程(TimerThread
)来执行这些任务。 -
抽象同事类(Colleague) :在这个场景中,抽象同事类是由
TimerTask
接口实现的,它定义了任务需要执行的操作。 -
具体同事类(Concrete Colleague) :这是实现
TimerTask
接口的具体任务类,它们通过Timer
类来安排自己的执行。
java
import java.util.Timer;
import java.util.TimerTask;
// 具体同事类:实现TimerTask接口的具体任务
class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("TimerTask is executed at " + System.currentTimeMillis());
}
}
public class TimerMediatorPattern {
public static void main(String[] args) {
// 具体中介者:创建Timer对象
Timer timer = new Timer();
// 创建具体同事对象:创建任务
MyTask task = new MyTask();
// 通过中介者安排任务的执行:安排任务在3秒后执行
timer.schedule(task, 3000);
}
}
Timer
类是中介者,它负责管理TimerTask
对象的执行。MyTask
类是具体同事类,它实现了TimerTask
接口,并定义了任务的具体行为。- 主函数中创建了
Timer
对象和MyTask
对象,并通过Timer
的schedule
方法安排MyTask
在3秒后执行。
工作原理:
-
注册任务 :通过
Timer
的schedule
方法,将TimerTask
对象和执行时间注册到Timer
中。 -
执行任务 :
Timer
内部使用一个线程(TimerThread
)来监控任务队列,当任务到达指定时间时,TimerThread
会执行这些任务。 -
解耦同事类 :
TimerTask
对象不需要知道其他任务的存在,也不需要直接与它们交互,所有的调度和执行都是通过Timer
完成的,这样就降低了任务之间的耦合度。
中介者模式在 Timer
类中的应用有效地将任务的调度和执行逻辑与任务的具体逻辑分离,提高了代码的模块化和可维护性 。