首页 > 编程笔记 > Java笔记 阅读:4

中介者模式(Java实现,附带实例)

中介者模式是一个很早就出现的模式,属于经典的 GoF(Gang of Four)设计模式。

在面对不同类型的多个应用程序时,经常遇到需要对这些客户程序之间的通信进行管理的情况,因为只有这样,才能让它们适当地交换信息,以维系某个处理流程。

中介者模式里的中介者说的是一个充当中间人的对象,该对象定义了某一组对象之间的交互方式。中介者使得这一组对象里的任何一个对象都能够与本组的其他对象沟通。用户可以通过该模式提供的中介机制明确地指定自己想要跟哪个对象通信。

由于这些对象都通过中介者来沟通,因此这样的沟通行为可以由中介者加以调节并管理。

中介者模式在JDK中的运用

这个模式在 JDK 里出现的地方可能不太容易立刻想到,但仔细找一下,还是很容易发现的。

例如,java.base 模块的 java.util.concurrent 包。这个包的 ExecutorService 类有个 submit() 方法,用来提交某项有待执行的任务。该类型的父类 Executor 提供了 execute() 方法,用来执行某项任务。这些方法接受一个代表任务的参数,该参数的类型是某种实现了 Callable 或 Runnable 接口的类型,我们可以通过这样的接口,以命令的形式来表示需要执行的任务。

中介者模式实例演示

下面这个例子可能过于简单,但主要用意只是想强调如何通过中介者模式实现一个处理程序(processor),让它调控车辆中各个传感器之间的通信行为,所以不用写得太长。

【实例】传感器之间的通信由 VehicleProcessor 处理。
record Sensor(String name) {
    void emitMessage(String message) {
        VehicleProcessor.acceptMessage(name, message);
    }
}

public static void main(String[] args) {
    System.out.println("Mediator Pattern, vehicle parts");
    var engineSensor = new Sensor("engine");
    var breakSensor = new Sensor("break");

    engineSensor.emitMessage("turn on");
    breakSensor.emitMessage("init");
}
程序输出结果如下:

Mediator Pattern, vehicle parts
sensor:'engine', delivered message:'turn on'
Sensor:'break', delivered message:'init'

这个例子的核心部件是 VehicleProcessor,它负责接收各个传感器发出的信息,并对其做出回应(参见下图)。


图 1 用 UML 类图来演示各个传感器如何通过 VehicleProcessor 进行通信

总结

中介者模式把各种对象之间的复杂通信行为切割开,让这些对象不再直接通信,而是通过这个中介者来通信。这样的话,参与通信的对象就能够在程序运行过程中随时变化。

中介者模式模式提供了一种封装与解耦方案,使得需要相互通信的各方通过中介者完成彼此的沟通。

相关文章