码迷,mamicode.com
首页 > 编程语言 > 详细

java23种设计模式七(连载)

时间:2016-08-09 15:03:40      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

七、调停者模式

       调停者模式包装了一系列相互作用的对象,使得这些对象相互之间不必显式的引用,从而极大的降低了对象间的耦合性,调停者模式通过引入调停者作为中间人,使得对象间既不用相互作用又能相互影响。

         调停者模式一般有以下几个角色:

          调停者:只是一个接口,定义了同事对象到调停者对象间的接口,可以是一个或多个方法

          具体的调停者:实现调停者的方法,将所有同事对象引入进来,从而负责协同各同事之间的关系

          同事对象:抽象出调停者到同事对象之间的接口

          具体的同事对象:实现不同同事之间具体所做的工作。

下面举个生动的例子以便更清晰的理解调停者模式:

          电脑主机的各个部分:CPU、显卡、硬盘、光驱等配件,都是通过主板来调配的,如果没有主板,那么各配件相互协同比如自己去实现,而各个配件之间的接口又各不相同,必须根据没配件制定不同的转换器,那么若加上主板,主板作为调停者,他知道如何和每个配件打交道,各配件只需要把需要做的事情交给主板,主板再通知到每个配件,这样工作就能更好的协同完成。

           接下来以电脑主板为例,请看具体的实现代码:

          

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系统中的工作流如果采用调停者模式是个比较不错的选择,每个部门或者每个任务都是相互独立的,完成一个任务后,交给调停者,让调停者通知下一个同事,完成相应的工作。

java23种设计模式七(连载)

标签:

原文地址:http://blog.csdn.net/lynnlovemin/article/details/52162029

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!