什麼是中介者模式:
如果一個對象系統中,各個子對象都要相互交互,形成了網狀結構,這時候,我們可以定義一個對象,各個子系統的處理和交互都交給它,由它統一調度。
開發中使用的中介者模式:
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");
}
}