①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