中介者模式(Mediator Pattern)中介者模式就是:用一个"中间人"来协调多个对象之间的交互,避免它们互相直接依赖。
java
/**
* 会议室中介者 - 协调各个设备的协作
*/
public interface MeetingRoomMediator {
void registerProjector(Projector projector);
void registerLight(Light light);
void registerAudioSystem(AudioSystem audioSystem);
/**
* 开始会议:协调各设备进入会议模式
*/
void startMeeting();
/**
* 结束会议:协调各设备恢复常态
*/
void endMeeting();
}
java
/**
* 智能会议室 - 实现中介者接口,协调所有设备
*/
public class SmartMeetingRoom implements MeetingRoomMediator {
private Projector projector;
private Light light;
private AudioSystem audioSystem;
@Override
public void registerProjector(Projector projector) {
this.projector = projector;
}
@Override
public void registerLight(Light light) {
this.light = light;
}
@Override
public void registerAudioSystem(AudioSystem audioSystem) {
this.audioSystem = audioSystem;
}
@Override
public void startMeeting() {
System.out.println("\n开始会议流程...");
light.dim();
audioSystem.turnOn();
audioSystem.adjustVolume(60);
projector.turnOn();
projector.present();
System.out.println("会议环境已准备就绪\n");
}
@Override
public void endMeeting() {
System.out.println("\n结束会议流程...");
projector.turnOff();
audioSystem.playBackgroundMusic();
audioSystem.turnOff();
light.turnOff();
System.out.println("设备已恢复正常状态\n");
}
}
java
/**
* 音响系统 - 会议参与者之一
*/
public class AudioSystem {
private MeetingRoomMediator mediator;
private boolean isOn = false;
private int volume = 50;
public AudioSystem(MeetingRoomMediator mediator) {
this.mediator = mediator;
this.mediator.registerAudioSystem(this);
}
public void turnOn() {
isOn = true;
System.out.println("音响系统已开启");
}
public void turnOff() {
isOn = false;
System.out.println("音响系统已关闭");
}
public void adjustVolume(int level) {
this.volume = Math.max(0, Math.min(100, level));
System.out.println("音量已调整至 " + this.volume + "%");
}
public void playBackgroundMusic() {
if (isOn) {
System.out.println("正在播放背景音乐...");
}
}
public boolean isOn() {
return isOn;
}
}
java
/**
* 灯光系统 - 会议参与者之一
*/
public class Light {
private MeetingRoomMediator mediator;
private boolean isOn = false;
private int brightnessLevel = 50;
public Light(MeetingRoomMediator mediator) {
this.mediator = mediator;
this.mediator.registerLight(this);
}
public void dim() {
brightnessLevel = 30;
isOn = true;
System.out.println("灯光已调暗至会议模式 (" + brightnessLevel + "%)");
}
public void brighten() {
brightnessLevel = 100;
isOn = true;
System.out.println("灯光已调亮至正常模式 (" + brightnessLevel + "%)");
}
public void turnOff() {
isOn = false;
System.out.println("灯光已关闭");
}
public boolean isOn() {
return isOn;
}
public int getBrightnessLevel() {
return brightnessLevel;
}
}
java
/**
* 投影仪 - 会议参与者之一
*/
public class Projector {
private MeetingRoomMediator mediator;
private boolean isOn = false;
public Projector(MeetingRoomMediator mediator) {
this.mediator = mediator;
this.mediator.registerProjector(this);
}
public void turnOn() {
isOn = true;
System.out.println("投影仪已开启,准备播放演示文稿");
}
public void turnOff() {
isOn = false;
System.out.println("投影仪已关闭");
}
public boolean isOn() {
return isOn;
}
public void present() {
if (isOn) {
System.out.println("正在播放演示文稿...");
} else {
System.out.println("无法播放:请先开启投影仪");
}
}
}
java
/**
* 中介者模式演示 - 模拟智能会议室场景
*/
public class MediatorPatternDemo {
public static void main(String[] args) {
// 创建中介者(智能会议室)
MeetingRoomMediator meetingRoom = new SmartMeetingRoom();
// 创建各个设备并注册到中介者
Projector projector = new Projector(meetingRoom);
Light light = new Light(meetingRoom);
AudioSystem audioSystem = new AudioSystem(meetingRoom);
System.out.println("欢迎使用智能会议室控制系统");
// 模拟开始会议
meetingRoom.startMeeting();
// 模拟会议中操作
System.out.println("会议进行中...");
projector.present();
audioSystem.adjustVolume(70);
// 模拟结束会议
meetingRoom.endMeeting();
System.out.println("会议结束,感谢使用智能会议室!");
}
}