java設計模式之調停者模式

①UML設計


②定義:調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯引用,從而使它們可以較鬆散地耦合。當這些對象中的某些對象之間的相互作用發生改變時,不會立即影響到其他的一些對象之間的相互作用。從而保證這些相互作用可以彼此獨立地變化。

③示例:

/**
 * 抽象調停者角色
 */
interface Mediator {

    //讓調停者去負責同事類的交互
    void change(Colleague c);

}
/**
 * 具體調停者
 */
public class MainBoard implements Mediator {

    private CDDriver  cdDriver;
    private CPU       cpu;
    private VideoCard videoCard;
    private SoundCard soundCard;

    /**
     * Setter method for property <tt>cdDriver</tt>.
     *
     * @param cdDriver value to be assigned to property cdDriver
     */
    public void setCdDriver(CDDriver cdDriver) {
        this.cdDriver = cdDriver;
    }

    /**
     * Setter method for property <tt>cpu</tt>.
     *
     * @param cpu value to be assigned to property cpu
     */
    public void setCpu(CPU cpu) {
        this.cpu = cpu;
    }

    /**
     * Setter method for property <tt>videoCard</tt>.
     *
     * @param videoCard value to be assigned to property videoCard
     */
    public void setVideoCard(VideoCard videoCard) {
        this.videoCard = videoCard;
    }

    /**
     * Setter method for property <tt>soundCard</tt>.
     *
     * @param soundCard value to be assigned to property soundCard
     */
    public void setSoundCard(SoundCard soundCard) {
        this.soundCard = soundCard;
    }

    @Override
    public void change(Colleague c) {
        if (c instanceof CDDriver) {
            cpu.showInfo();
        } else if (c instanceof CPU) {
            soundCard.showInfo();
        } else if (c instanceof SoundCard) {
            videoCard.showInfo();
            System.out.println("Load completion, please enjoy");
        }
    }
}
/**
 * 抽象同事類角色:
 */
public abstract class Colleague {

    //持有一個調停者對象
    private Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }

    public Mediator getMediator() {
        return mediator;
    }
}

/**
 * 具體同事類
 */
public class CDDriver extends Colleague {

    public CDDriver(Mediator mediator) {
        super(mediator);
    }

    public void showInfo() {
        System.out.println("CDDriver starts to run");
        getMediator().change(this);
    }

}

public class CPU extends Colleague {

    public CPU(Mediator mediator) {
        super(mediator);
    }

    public void showInfo() {
        System.out.println("CPU starts to run");
        getMediator().change(this);
    }
}

public class SoundCard extends Colleague {

    public SoundCard(Mediator mediator) {
        super(mediator);
    }

    public void showInfo() {
        System.out.println("SoundCard starts to run");
        getMediator().change(this);
    }

}

public class VideoCard extends Colleague {

    public VideoCard(Mediator mediator) {
        super(mediator);
    }

    public void showInfo() {
        System.out.println("VideoCard starts to run");
        getMediator().change(this);
    }
}
public class Client{
    public static void main(String[] args) {
        MainBoard mediator = new MainBoard();
        CDDriver cdDriver = new CDDriver(mediator);
        CPU cpu = new CPU(mediator);
        SoundCard soundCard = new SoundCard(mediator);
        VideoCard videoCard = new VideoCard(mediator);
        mediator.setCpu(cpu);
        mediator.setSoundCard(soundCard);
        mediator.setVideoCard(videoCard);
        cdDriver.showInfo();
    }
}
執行結果:
CDDriver starts to run
CPU starts to run
SoundCard starts to run
VideoCard starts to run
Load completion, please enjoy



發佈了46 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章