中介者模式,用一个中介对象去封装一系列对象的交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 Mediator类,抽象中介类:
abstract class Mediator{
public abstract void Send(String message,Colleague colleague);
}Colleague类,抽象同事类:
abstract class Colleague{
protected Mediator mediator;
public Colleague(Mediator mediator){
this.mediator=mediator;
}
}ConcreteMediator类,具体中介类:
class ConcreteMediator extends Mediator{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public void Send(String message,Colleague colleague){
if(colleague==colleague1){
colleague2.Notify(message);
}else{
colleague1.Notify(message);
}
}
}ConcreteColleague1和ConcreteColleague各种同事类:
class ConcreteColleague1 extends Colleague{
public void Send(String message){
mediator.Send(message,this);
}
public void Notify(String message){
System.out.println("colleague1 handle "+message);
}
}
class ConcreteColleague2 extends Colleague{
public void Send(String message){
mediator.Send(message,this);
}
public void Notify(String message){
System.out.println("colleague2 handle "+message);
}
}客户端代码:
static void main(String[] args){
ConcreteMediator m=new ConcreteMediator();
ConcreteColleague1 c1=new ConcreteColleague1();
ConcreteColleague2 c2=new ConcreteColleague2();
m.colleague1=c1;
m.colleague2=c2;
c1.Send("A");
c2.Send("B");
}中介者模式优缺点:
优点:Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator,由于把对象如何协作进行了抽象,将中介作为一个独立的概念,并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上,也就是站在一个更宏观的角度去看待系统。
缺点:由于ConcreteMediator控制集中化,于是就把交互的复杂性变为了中介者的复杂性,这就使得ConcreteMediator比任何一个ConcreteColleague都复杂。
