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系统中的任务分发系统若是采用调停者模式是个比较不错的选择,每一个部门或者每一个任务都是相互独立的,完成一个任务后,交给调停者,让调停者通知下一个同事,完成相应的工做。
相关文章
相关标签/搜索