您的位置:首页 > 编程语言 > Java开发

java23种设计模式七(连载)

2016-08-09 14:02 405 查看
七、调停者模式


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

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

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

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

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

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

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

          电脑主机的各个部分: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系统中的任务分发系统如果采用调停者模式是个比较不错的选择,每个部门或者每个任务都是相互独立的,完成一个任务后,交给调停者,让调停者通知下一个同事,完成相应的工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息