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 參考的輸出結果:
播放音頻 : 音頻數據
播放視頻 : 視頻數據