定义:Define an object that encapsules how a set of objects interact.Mediator promotes loose couping by keeping objects from refering to each other explicitly ,and it lets you vary their interaction independently
(用一个中介对象封装一系列的对象交互,中介者模式使对象不必相互引用,使其耦合松散,而且可以独立的改变他们之间的交互)
类图
例子
package Mediator;
public class Sale extends AbstractColleague{
private int salesStatus=0;
public Sale(Mediator mediator) {
super(mediator);
}
public Sale(Mediator mediator,int s){
super(mediator);
salesStatus=s;
}
public int getSalseStatus(){
return salesStatus;
}
public void setSalseStatus(int s){
this.salesStatus=s ;
}
}
package Mediator;
public class Purchase extends AbstractColleague{
public Purchase(Mediator mediator) {
super(mediator);
}
public void buy(){
// mediator.execute("buy", new Object[]());
};
public void refuse(){
System.out.println("不买入");
}
}
package Mediator;
public abstract class Mediator {
protected Purchase purchase;
protected Sale sale;
public Mediator(){
}
public void setPurchase(Purchase purchase){
this.purchase=purchase ;
}
public void setSale(Sale sale){
this.sale=sale;
}
abstract void execute(String s,Object[] o );
}
package Mediator;
public class ConcreteMediator extends Mediator{
private void buy(){
if(sale.getSalseStatus()>=100)
System.out.println("买入");
}
public void execute(String s,Object[] o ){
if(s.equals("buy"))
this.buy();
}
}
package Mediator;
public class AbstractColleague {
Mediator mediator ;
public AbstractColleague(Mediator mediator){
this.mediator=mediator;
}
}
package Mediator;
public class Client {
public static void main(String [] args){
Mediator m=new ConcreteMediator();
Sale sale =new Sale(m);
sale.setSalseStatus(200);
Purchase purchase=new Purchase(m);
m.setPurchase(purchase);
m.setSale(sale);
purchase.buy();
}
}
输出 ”买入“
当相关类很多的时候,中介者会变得非常复杂,比如 purchase 中方法很多的时候,中介中execute 方法会有很多判断语句出现,此时是够可以用java的反射来进行优化?
接下来我会进一步讨论这个问题 。。
我们来看一下中介者的好处
1.减少类间依赖,把原有一多映射改为一一映射,同事类只依赖于中介者,降低类间耦合。
缺点:中介者逻辑会很复杂中介者会膨胀的很大。
应用场景 :MVC 中的C 机场调度场景 中介机构