中介者模式(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("会议结束,感谢使用智能会议室!");
    }
}
相关推荐
Yu_Lijing6 小时前
基于C++的《Head First设计模式》笔记——备忘录模式
c++·笔记·设计模式·备忘录模式
无籽西瓜a7 小时前
【西瓜带你学设计模式 | 第二期-观察者模式】观察者模式——推模型与拉模型实现、优缺点与适用场景
java·后端·观察者模式·设计模式
我真会写代码10 小时前
Java程序员常用设计模式详解(实战版)
java·开发语言·设计模式
无籽西瓜a12 小时前
【西瓜带你学设计模式 | 第一期-单例模式】单例模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·单例模式·设计模式
cliffordl1 天前
设计模式(python)
python·设计模式
云道轩1 天前
告诉 Claude Code 在项目中遵循特定的编程模式/设计模式和技术栈约束
设计模式·ai·agent·claude code
花间相见1 天前
【Java基础面试题】—— 核心知识点面试题(含答案):语法+集合+JVM+设计模式+算法
java·jvm·设计模式
朱一头zcy1 天前
设计模式入门:最简单的模板方法模式
笔记·设计模式·模板方法模式
君主黑暗1 天前
设计模式-观察者模式
观察者模式·设计模式
砍光二叉树1 天前
【设计模式】结构型-组合模式
设计模式·组合模式