博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中介模式
阅读量:6342 次
发布时间:2019-06-22

本文共 3038 字,大约阅读时间需要 10 分钟。

hot3.png

中间桥梁,将互相不联系的事物联系起来。

public abstract class Colleague {    protected Mediator mediator;    /**     * 用于表示几件事物的统一性,最起码是同一个媒介     *     * @param mediator     */    public Colleague(Mediator mediator) {        this.mediator = mediator;    }}
public class CDDevice extends Colleague {    private String data;    /**     * CD唱片,包括音频,视频     * @param mediator     */    public CDDevice(Mediator mediator) {        super(mediator);    }    public String read() {        return data;    }    public void load() {        data = "视频数据,音频数据";        mediator.changed(this);        // 媒介分发数据    }}
public class CPU extends Colleague {    private String video, sound;    public CPU(Mediator mediator) {        super(mediator);    }    public String getVideo() {        return video;    }    /**     * 解析数据     *     * @param data     */    public void decodeData(String data) {        String[] tmp = data.split("");        video = tmp[0];        sound = tmp[1];        mediator.changed(this);    }    public String getSound() {        return sound;    }}
public class GraphicsCard extends Colleague {    public GraphicsCard(Mediator mediator) {        super(mediator);    }    /**     * 视频数据处理     *     * @param data     */    public void videoPlay(String data) {        System.out.print("视频:" + data);    }}
public class SoundCard extends Colleague {    public SoundCard(Mediator mediator) {        super(mediator);    }    /**     * 音频数据处理     * @param data     */    public void soundPlay(String data){        System.out.print("音频:"+  data);    }}
public abstract class Mediator {    /**     * 通知中介改变     *     * @param c     */    abstract void changed(Colleague c);}
public class MainBoard extends Mediator {    private CDDevice cdDevice;    private CPU cpu;    private GraphicsCard graphicsCard;    private SoundCard soundCard;    @Override    void changed(Colleague c) {        if (c == cdDevice) {            cdDevice = (CDDevice) c;            cpu.decodeData(cdDevice.read());        } else if (c == cpu) {            cpu = (CPU) c;            soundCard.soundPlay(cpu.getVideo());            graphicsCard.videoPlay(cpu.getSound());        }    }    public MainBoard setCdDevice(CDDevice cdDevice) {        this.cdDevice = cdDevice;        return this;    }    public MainBoard setCPU(CPU cpu) {        this.cpu = cpu;        return this;    }    public MainBoard setGraphicsCard(GraphicsCard graphicsCard) {        this.graphicsCard = graphicsCard;        return this;    }    public MainBoard setSoundCard(SoundCard soundCard) {        this.soundCard = soundCard;        return this;    }}
public static void main(String[] args) {    MainBoard mediator = new MainBoard();    CDDevice cdDevice = new CDDevice(mediator);    CPU cpu = new CPU(mediator);    GraphicsCard graphicsCa = new GraphicsCard(mediator);    SoundCard soundCard = new SoundCard(mediator);    mediator.setCdDevice(cdDevice).setCPU(cpu).setGraphicsCard(graphicsCa).setSoundCard(soundCard);    cdDevice.load();      //  CD开始放片}

 

转载于:https://my.oschina.net/u/3342652/blog/1554938

你可能感兴趣的文章
深入V8引擎-默认Platform之mac篇(1)
查看>>
linux ssh tunnel使用
查看>>
十、详解FFplay音视频同步
查看>>
自定义元素探秘及构建可复用组件最佳实践
查看>>
小猿圈Python教程之全面解析@property的使用
查看>>
mpvue开发小程序所遇问题及h5转化方案
查看>>
View和Activity的生命周期
查看>>
解决PHP下载大文件失败,并限制下载速度
查看>>
java B2B2C Springcloud电子商城系统—Feign实例
查看>>
java B2B2C Springcloud多租户电子商城系统 (五)springboot整合 beatlsql
查看>>
Throwable是一个怎样的类?
查看>>
Python基础(一)
查看>>
三条代码 搞定 python 生成验证码
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>