中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
abstract class Mediator
{
public abstract void send(String message,Colleague colleague);
}
abstract class Colleague
{
protected Mediator mediator;
public Colleague(Mediator mediator)
{
this.mediator = mediator;
}
}
class ConcreteMediator extends Mediator
{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public void setColleaue1(ConcreteColleague1 colleague1)
{
this.colleague1 = colleague1;
}
public void setColleaue2(ConcreteColleague2 colleague2)
{
this.colleague2 = colleague2;
}
public void send(String message,Colleague colleague)
{
if(colleague == colleague1)
{
colleague2.notify(message);
}
else
{
colleague1.notify(message);
}
}
}
class ConcreteColleague1 extends Colleague
{
public ConcreteColleague1(Mediator mediator)
{
super(mediator);
}
public void send(String message)
{
mediator.send(message,this);
}
public void notify(String message)
{
System.out.println("同事1得到消息:" + message);
}
}
class ConcreteColleague2 extends Colleague
{
public ConcreteColleague2(Mediator mediator)
{
super(mediator);
}
public void send(String message)
{
mediator.send(message,this);
}
public void notify(String message)
{
System.out.println("同事2得到消息:" + message);
}
}
class MediatorTest
{
public static void main(String[] args)
{
ConcreteMediator m = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1(m);
ConcreteColleague2 c2 = new ConcreteColleague2(m);
m.setColleaue1(c1);
m.setColleaue2(c2);
c1.send("你好吗?");
c2.send("我很好!");
}
}