示例1
一个智能家居控制系统。在这个系统中,我们有多个设备,如灯光、窗帘、空调等,它们之间需要相互协作以达到智能控制的目的。例如,当我们说“晚安”时,系统需要关闭灯光、拉上窗帘、调整空调到适宜的温度。在这个场景中,中介者(智能家居控制中心)就是协调各个设备之间交互的核心。
示例代码
首先,我们定义设备的接口和几个具体的设备类:
interface SmartDevice {
void operateDevice(String command, Mediator mediator);
}
class Light implements SmartDevice {
@Override
public void operateDevice(String command, Mediator mediator) {
System.out.println("Light " + command);
mediator.notifyDevices(this, command);
}
}
class Curtain implements SmartDevice {
@Override
public void operateDevice(String command, Mediator mediator) {
System.out.println("Curtain " + command);
mediator.notifyDevices(this, command);
}
}
class AirConditioner implements SmartDevice {
@Override
public void operateDevice(String command, Mediator mediator) {
System.out.println("AirConditioner " + command);
mediator.notifyDevices(this, command);
}
}
接下来,我们定义中介者接口和具体的中介者实现:
interface Mediator {
void addDevice(SmartDevice device);
void notifyDevices(String command);
}
class SmartHomeMediator implements Mediator {
private List<SmartDevice> devices = new ArrayList<>();
@Override
public void addDevice(SmartDevice device) {
devices.add(device);
}
@Override
public void notifyDevices(String command) {
for (SmartDevice device : devices) {
device.operateDevice(command, this);
}
}
}
最后,我们通过客户端代码来演示智能家居系统的工作流程:
public class SmartHomeDemo {
public static void main(String[] args) {
Mediator mediator = new SmartHomeMediator();
SmartDevice light = new Light();
SmartDevice curtain = new Curtain();
SmartDevice airConditioner = new AirConditioner();
mediator.addDevice(light);
mediator.addDevice(curtain);
mediator.addDevice(airConditioner);
// 通过中介者统一控制,模拟“晚安”场景
System.out.println("Activating Goodnight Scene:");
mediator.notifyDevices("OFF");
}
}
示例2
在这个例子中,SmartHomeMediator
是中介者,它知道如何协调各个智能设备之间的交互。当我们对灯光说“晚安”(即关闭灯光)时,中介者可以根据预设的场景,通知窗帘拉上、空调调节到适宜的温度等,从而达到智能控制的效果。
中介者模式可以类比为日常生活中的航空交通管制中心(ATC)。在一个繁忙的机场,有许多飞机需要起飞、降落、滑行和等待,如果每架飞机直接与其他飞机沟通,情况会变得异常复杂且危险。航空交通管制中心作为中介者,协调所有飞机的动作,确保安全和有效的运营。
示例代码
首先,我们定义飞机的接口和具体的飞机类:
interface Aircraft {
void send(String message);
void receive(String message);
}
class Airplane implements Aircraft {
private AirTrafficControlMediator atcMediator;
private String flightNumber;
public Airplane(AirTrafficControlMediator atc, String flightNumber) {
this.atcMediator = atc;
this.flightNumber = flightNumber;
}
@Override
public void send(String message) {
System.out.println("Flight " + flightNumber + " sending message: " + message);
atcMediator.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println("Flight " + flightNumber + " received message: " + message);
}
}
接下来,我们定义中介者接口和具体的中介者实现:
interface AirTrafficControlMediator {
void sendMessage(String message, Aircraft aircraft);
void addAircraft(Aircraft aircraft);
}
class AirTrafficControlCenter implements AirTrafficControlMediator {
private List<Aircraft> aircrafts = new ArrayList<>();
@Override
public void addAircraft(Aircraft aircraft) {
aircrafts.add(aircraft);
}
@Override
public void sendMessage(String message, Aircraft originAircraft) {
for (Aircraft aircraft : aircrafts) {
// 飞机不接收自己发送的消息
if (aircraft != originAircraft) {
aircraft.receive(message);
}
}
}
}
最后,我们通过客户端代码来演示航空交通管制中心的工作流程:
public class AirTrafficControlDemo {
public static void main(String[] args) {
AirTrafficControlMediator atcMediator = new AirTrafficControlCenter();
Aircraft flight1 = new Airplane(atcMediator, "AC159");
Aircraft flight2 = new Airplane(atcMediator, "DL120");
Aircraft flight3 = new Airplane(atcMediator, "UA993");
atcMediator.addAircraft(flight1);
atcMediator.addAircraft(flight2);
atcMediator.addAircraft(flight3);
// 模拟飞机间的通信
flight1.send("Ascending to 30,000 ft.");
flight2.send("Descending to 10,000 ft.");
flight3.send("Requesting permission to land.");
}
}
在这个例子中,AirTrafficControlCenter
是中介者,它知道如何协调各个飞机之间的交流。每架飞机通过航空交通管制中心来发送和接收消息,而不是直接与其他飞机通信,这样减少了飞机之间的直接依赖,提高了系统的安全性和效率。