java23種設計模式七(連載)

7、調停者模式
java

       調停者模式包裝了一系列相互做用的對象,使得這些對象相互之間沒必要顯式的引用,從而極大的下降了對象間的耦合性,調停者模式經過引入調停者做爲中間人,使得對象間既不用相互做用又能相互影響。ide

         調停者模式通常有如下幾個角色:this

          調停者:只是一個接口,定義了同事對象到調停者對象間的接口,能夠是一個或多個方法spa

          具體的調停者:實現調停者的方法,將全部同事對象引入進來,從而負責協同各同事之間的關係code

          同事對象:抽象出調停者到同事對象之間的接口對象

          具體的同事對象:實現不一樣同事之間具體所作的工做。接口

下面舉個生動的例子以便更清晰的理解調停者模式:get

          電腦主機的各個部分:CPU、顯卡、硬盤、光驅等配件,都是經過主板來調配的,若是沒有主板,那麼各配件相互協同好比本身去實現,而各個配件之間的接口又各不相同,必須根據沒配件制定不一樣的轉換器,那麼若加上主板,主板做爲調停者,他知道如何和每一個配件打交道,各配件只須要把須要作的事情交給主板,主板再通知到每一個配件,這樣工做就能更好的協同完成。class

           接下來以電腦主板爲例,請看具體的實現代碼:引用

          

public interface Mediator {

	public void changed(Colleague colleague);
}

public abstract class Colleague {

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

public class CDDriver extends Colleague {

	private String data = "";
	
	public CDDriver(Mediator mediator) {
		super(mediator);
	}
	
	public String getData() {
		return data;
	}
	
	public void readCD(){
		System.out.println("打開CD");
		this.data = "讀取光盤";
		getMediator().changed(this);
	}

}

public class CPU extends Colleague {

	private String data = "";
	
	public CPU(Mediator mediator) {
		super(mediator);
	}
	
	public String getData() {
		return data;
	}
	
	public void executeData(String data){
		this.data = data;
		System.out.println("CPU正在處理data:"+data);
		getMediator().changed(this);
	}

}

public class Display extends Colleague {

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

	public void showData(String data){
		System.out.println("當前正在顯示的數據是:"+data);
	}
}

public class MainBoard implements Mediator {

	private CDDriver driver = null;
	private CPU cpu = null;
	private Display display = null;
	
	public void setDriver(CDDriver driver) {
		this.driver = driver;
	}
	
	public void setCpu(CPU cpu) {
		this.cpu = cpu;
	}
	
	public void setDisplay(Display display) {
		this.display = display;
	}
	
	@Override
	public void changed(Colleague colleague) {
		if(colleague instanceof CDDriver){
			openDriverData();
		}else{
			openCPU();
		}
	}
	
	private void openDriverData(){
		String data = driver.getData();
		cpu.executeData(data);
	}
	
	private void openCPU(){
		String data = cpu.getData();
		display.showData(data);
	}

}

public class Client {

	public static void main(String[] args) {
		MainBoard mediator = new MainBoard();
		
		CDDriver driver = new CDDriver(mediator);
		CPU cpu = new CPU(mediator);
		Display display = new Display(mediator);
		
		mediator.setDriver(driver);
		mediator.setCpu(cpu);
		mediator.setDisplay(display);
		
		driver.readCD();
	}
}
在實際案例中,好比OA系統中的任務分發系統若是採用調停者模式是個比較不錯的選擇,每一個部門或者每一個任務都是相互獨立的,完成一個任務後,交給調停者,讓調停者通知下一個同事,完成相應的工做。
相關文章
相關標籤/搜索