中介者模式(Mediator Pattern)

中介者模式(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("会议结束,感谢使用智能会议室!");
    }
}
相关推荐
李广坤5 小时前
迭代器模式(Iterator Pattern)
设计模式
李广坤6 小时前
解释器模式(Interpreter Pattern)
设计模式
阿无,9 小时前
java23种设计模式之前言
设计模式
Asort10 小时前
JavaScript设计模式(八):组合模式(Composite)——构建灵活可扩展的树形对象结构
前端·javascript·设计模式
数据智能老司机10 小时前
数据工程设计模式——数据基础
大数据·设计模式·架构
笨手笨脚の12 小时前
设计模式-代理模式
设计模式·代理模式·aop·动态代理·结构型设计模式
Overboom20 小时前
[C++] --- 常用设计模式
开发语言·c++·设计模式
@大迁世界1 天前
Vue 设计模式 实战指南
前端·javascript·vue.js·设计模式·ecmascript
数据智能老司机1 天前
数据工程设计模式——冷热数据存储
大数据·设计模式·架构