中介者模式(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("会议结束,感谢使用智能会议室!");
    }
}
相关推荐
evans在进步11 小时前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
字节跳动开源17 小时前
VisActor全新图可视化开源项目:VGraph
前端·设计模式·开源
码匠许师傅18 小时前
【设计模式精讲】11.桥接模式(Bridge)
c++·设计模式·桥接模式·uml
学习星球2 天前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
码匠许师傅3 天前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
码匠许师傅3 天前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
workflower3 天前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
Java后端的Ai之路3 天前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
AI人工智能+电脑小能手4 天前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc