什么是中介者模式:
如果一个对象系统中,各个子对象都要相互交互,形成了网状结构,这时候,我们可以定义一个对象,各个子系统的处理和交互都交给它,由它统一调度。
开发中使用的中介者模式:
1.mvc架构中的c,需要同时和m和v打交道
2.java.lang.reflect.Method#invoke()
中介者模式例子:
这里的实现的场景是,软件产品的研发流程。所以我们定义下各个部门职能
package com.javademo.pattern.mediator;
/**
* 部门接口
*
* @author liuxg
* @date 2016年5月27日 下午9:22:21
*/
public interface Department {
void needToDo();
}
class Research implements Department {
@Override
public void needToDo() {
System.out.println("研发产品");
}
}
class Sale implements Department {
@Override
public void needToDo() {
System.out.println("卖产品");
}
}
class Business implements Department {
@Override
public void needToDo() {
System.out.println("定需求");
}
}
中介者没有出现之前,各个部门的交流,都需要面对面的交流,我们来设计一下中介者,所有的交流和调度都由他来完成
public interface Mediator {
void register(String dname ,Department department);
void command(String dename);
}
/**
* 领导充当中介者角色
* @author liuxg
* @date 2016年5月27日 下午9:19:29
*/
class Leader implements Mediator {
private Map<String ,Department> map = new HashMap<String ,Department> ();
@Override
public void register(String dname, Department department) {
map.put(dname, department);
}
@Override
public void command(String dename) {
if (map.get(dename) != null) {
map.get(dename).needToDo();
}
}
}
客户端产品的研发流程直接就由中介者来调度了
public class Client {
public static void main(String[] args) {
Mediator mediator = new Leader();
Department research = new Research();
Department business = new Business();
Department sale = new Sale();
mediator.register("research", research); //将调度权交给领导
mediator.register("business", business);
mediator.register("sale", sale);
mediator.command("business");//领导进行调度
mediator.command("research");
mediator.command("sale");
}
}