文章目录
- 示例1
- 示例代码
- 示例2
- 示例代码
示例1
一个智能家居控制系统。在这个系统中,我们有多个设备,如灯光、窗帘、空调等,它们之间需要相互协作以达到智能控制的目的。例如,当我们说“晚安”时,系统需要关闭灯光、拉上窗帘、调整空调到适宜的温度。在这个场景中,中介者(智能家居控制中心)就是协调各个设备之间交互的核心。
示例代码
首先,我们定义设备的接口和几个具体的设备类:
java">interface SmartDevice {void operateDevice(String command, Mediator mediator);
}class Light implements SmartDevice {@Overridepublic void operateDevice(String command, Mediator mediator) {System.out.println("Light " + command);mediator.notifyDevices(this, command);}
}class Curtain implements SmartDevice {@Overridepublic void operateDevice(String command, Mediator mediator) {System.out.println("Curtain " + command);mediator.notifyDevices(this, command);}
}class AirConditioner implements SmartDevice {@Overridepublic void operateDevice(String command, Mediator mediator) {System.out.println("AirConditioner " + command);mediator.notifyDevices(this, command);}
}
接下来,我们定义中介者接口和具体的中介者实现:
java">interface Mediator {void addDevice(SmartDevice device);void notifyDevices(String command);
}class SmartHomeMediator implements Mediator {private List<SmartDevice> devices = new ArrayList<>();@Overridepublic void addDevice(SmartDevice device) {devices.add(device);}@Overridepublic void notifyDevices(String command) {for (SmartDevice device : devices) {device.operateDevice(command, this);}}
}
最后,我们通过客户端代码来演示智能家居系统的工作流程:
java">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)。在一个繁忙的机场,有许多飞机需要起飞、降落、滑行和等待,如果每架飞机直接与其他飞机沟通,情况会变得异常复杂且危险。航空交通管制中心作为中介者,协调所有飞机的动作,确保安全和有效的运营。
示例代码
首先,我们定义飞机的接口和具体的飞机类:
java">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;}@Overridepublic void send(String message) {System.out.println("Flight " + flightNumber + " sending message: " + message);atcMediator.sendMessage(message, this);}@Overridepublic void receive(String message) {System.out.println("Flight " + flightNumber + " received message: " + message);}
}
接下来,我们定义中介者接口和具体的中介者实现:
java">interface AirTrafficControlMediator {void sendMessage(String message, Aircraft aircraft);void addAircraft(Aircraft aircraft);
}class AirTrafficControlCenter implements AirTrafficControlMediator {private List<Aircraft> aircrafts = new ArrayList<>();@Overridepublic void addAircraft(Aircraft aircraft) {aircrafts.add(aircraft);}@Overridepublic void sendMessage(String message, Aircraft originAircraft) {for (Aircraft aircraft : aircrafts) {// 飞机不接收自己发送的消息if (aircraft != originAircraft) {aircraft.receive(message);}}}
}
最后,我们通过客户端代码来演示航空交通管制中心的工作流程:
java">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
是中介者,它知道如何协调各个飞机之间的交流。每架飞机通过航空交通管制中心来发送和接收消息,而不是直接与其他飞机通信,这样减少了飞机之间的直接依赖,提高了系统的安全性和效率。