设计模式-行为型-中介者模式-Mediator

同事抽象类

public abstract class Colleague {
    private Mediator mediator;

    public abstract void play(String data);
}

视频同事

public class AudioColleague extends Colleague {
    public void play(String data) {
        System.out.println("画外音是:" + data);
    }
}

光驱同事

public class CdColleague extends Colleague {
    private String data = "";

    public void play(String data) {
        this.data = data;
        System.out.println("从cd中读取数据:" + data);
        getMediator().change(this);
    }
}

处理器同事

public class CpuColleague extends Colleague {
    private String videoData = "";//读取出来的视频数据
    private String audioData = "";//读取出来的音频数据

    public void play(String data) {//处理数据
        String[] split = data.split(",");
        this.videoData = split[0];
        this.audioData = split[1];

        System.out.println("从cpu中读取视频:" + videoData);
        System.out.println("从cpu中读取音频:" + audioData);

        getMediator().change(this);
    }
}

声音同事

public class VideColleague extends Colleague {
    public void play(String data) {
        System.out.println("您正在观看的是:" + data);
    }
}

中介者接口

public interface Mediator { void change(Colleague c); }

主板中介者类

public class MainBoardMediator implements Mediator {
    private Colleague cd;
    private Colleague cpu;
    private Colleague video;
    private Colleague audio;

    @Override
    public void change(Colleague c) {
        if (c instanceof CdColleague) {
            afterCdReadData((CdColleague) c);
        } else if (c instanceof CpuColleague) {
            afterCpuReadData((CpuColleague) c);
        }
    }

    private void afterCdReadData(CdColleague cd) {//光驱读取数据后与其他对象交互
        String data = cd.getData();
        cpu.play(data);
    }

    private void afterCpuReadData(CpuColleague cd) {//cpu读取数据后与其他对象交互
        String videoData = cd.getVideoData();
        String audioData = cd.getAudioData();

        video.play(videoData);
        audio.play(audioData);
    }
}

演示类

public class Demo {
    public static void main(String[] args) {
        MainBoardMediator mediator = new MainBoardMediator();

        Colleague audio = new AudioColleague(mediator);
        Colleague cd = new CdColleague(mediator);
        Colleague cpu = new CpuColleague(mediator);
        Colleague video = new VideColleague(mediator);

        mediator.setAudio(audio);
        mediator.setCd(cd);
        mediator.setCpu(cpu);
        mediator.setVideo(video);

        cd.play("CCTV,天气预报");
    }
}

演示结果

为了使代码博客代码更简洁,我省略了构造方法和set/get方法

相关推荐

  1. 行为设计模式中介模式

    2024-04-04 05:50:07       34 阅读
  2. 设计模式行为设计模式——中介模式

    2024-04-04 05:50:07       21 阅读
  3. 设计模式行为模式中介模式

    2024-04-04 05:50:07       32 阅读
  4. 设计模式(十二):中介模式行为模式

    2024-04-04 05:50:07       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 05:50:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 05:50:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 05:50:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 05:50:07       20 阅读

热门阅读

  1. Linux 内核的构建块:深入探索 C 结构体的应用

    2024-04-04 05:50:07       16 阅读
  2. 设计模式(17):中介者模式

    2024-04-04 05:50:07       11 阅读
  3. 【图像处理小知识】PIL Image 中的P和L模式

    2024-04-04 05:50:07       18 阅读
  4. Ubuntu终端多窗口分屏Terminator优化

    2024-04-04 05:50:07       12 阅读
  5. Centos7、ubuntu22.04.3安装php7.4,mysql8.0

    2024-04-04 05:50:07       26 阅读
  6. 中文bert预训练

    2024-04-04 05:50:07       13 阅读
  7. 【C++】编程规范之表达式原则

    2024-04-04 05:50:07       17 阅读