1 创建一个抽象的中介者Mediator
package mediatorpattern2;
public abstract class Mediator {
public abstract void changed(Colleague c);
}
2 创建一个抽象的同事对象
package mediatorpattern2;
public abstract class Colleague {
//每一个同事 都要知道中介者
protected Mediator mediator;
public Colleague(Mediator mediator) {
super();
this.mediator = mediator;
}
}
3 创建实体类的同事
获取外部原始数据的CD设备类:
package mediatorpattern2;
public class CdDevice extends Colleague{
private String data;
public CdDevice(Mediator mediator) {
super(mediator);
}
public String read(){
return data;
}
public void load(){
data = "视频数据,音频数据";
//通知中介者
mediator.changed(this);
}
}
处理音视频数据的CPU:
package mediatorpattern2;
public class CPU extends Colleague{
private String dataVideo, dataSound;
public CPU(Mediator mediator) {
super(mediator);
}
public String getDataVideo() {
return dataVideo;
}
public String getDataSound() {
return dataSound;
}
public void decodeData(String data){
//分割视频数据 和音频数据
String[] tmp = data.split(",");
dataVideo = tmp[0];
dataSound = tmp[1];
//通知中介者
mediator.changed(this);
}
}
处理视频数据的GraphicsCard:
package mediatorpattern2;
public class GraphicsCard extends Colleague{
public GraphicsCard(Mediator mediator) {
super(mediator);
}
public void palyVideo(String data){
System.out.println("播放视频 : "+data);
}
}
4 客户端测试类:
package mediatorpattern2;
public class Client {
public static void main(String[] args) {
//构造主板
MainBoard mainBoard = new MainBoard();
//分别构造各个零件
CdDevice cdDevice = new CdDevice(mainBoard);
CPU cpu = new CPU(mainBoard);
GraphicsCard graphicsCard = new GraphicsCard(mainBoard);
SoundCard soundCard = new SoundCard(mainBoard);
//中介者将各个零件安装到主板
mainBoard.setCdDevice(cdDevice);
mainBoard.setCpu(cpu);
mainBoard.setGraphicsCard(graphicsCard);
mainBoard.setSoundCard(soundCard);
//CD设备开始播放
cdDevice.load();
}
}
5 参考的输出结果:
播放音频 : 音频数据
播放视频 : 视频数据