Java設計模式之16——中介者模式(1)

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 參考的輸出結果:

播放音頻 : 音頻數據
播放視頻 : 視頻數據

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章