中介者模式(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 小时前
【JUnit实战3_27】第十六章:用 JUnit 测试 Spring 应用:通过实战案例深入理解 IoC 原理
spring·观察者模式·设计模式·单元测试·ioc·依赖注入·junit5
她说彩礼65万7 小时前
C#设计模式 单例模式实现方式
单例模式·设计模式·c#
安冬的码畜日常10 小时前
【JUnit实战3_28】第十七章:用 JUnit 5 实测 SpringBoot 项目
spring boot·功能测试·测试工具·设计模式·单元测试·junit5
围巾哥萧尘11 小时前
TRAE Agent 歌曲创作助手构建与使用教程🧣
设计模式
superman超哥11 小时前
仓颉语言中流式I/O的设计模式深度剖析
开发语言·后端·设计模式·仓颉
m0_7482480213 小时前
Spring设计模式刨根问底
java·spring·设计模式
不要额外加糖14 小时前
tql,寥寥几行,实现无队列无感刷新
前端·javascript·设计模式
ACGkaka_14 小时前
设计模式学习(十二)状态模式
学习·设计模式·状态模式
乐悠小码15 小时前
Java设计模式精讲---01工厂方法模式
java·设计模式·工厂方法模式
yours_Gabriel16 小时前
【设计模式】UML和设计原则
java·设计模式·uml