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系統中的任務分發系統若是採用調停者模式是個比較不錯的選擇,每一個部門或者每一個任務都是相互獨立的,完成一個任務後,交給調停者,讓調停者通知下一個同事,完成相應的工做。