中介者模式(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("会议结束,感谢使用智能会议室!");
    }
}
相关推荐
静水流深_沧海一粟8 小时前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder8 小时前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室16 小时前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦1 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo5 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4965 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃5 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
驴儿响叮当20105 天前
设计模式之状态模式
设计模式·状态模式
电子科技圈5 天前
XMOS推动智能音频等媒体处理技术从嵌入式系统转向全新边缘计算
人工智能·mcu·物联网·设计模式·音视频·边缘计算·iot
徐先生 @_@|||5 天前
安装依赖三方exe/msi的软件设计模式
设计模式