中介者模式:一个类把所有的收发信息的对象引用存储起来,收发信息的对象都通过这个类来把信息传递到例外一个类。
和观察者模式非常像,都是这个靠提前收集接收信息对象的引用。但是观察者模式是为了解决固定一对多的对象之间信息传递广播问题。而中介者模式解决的是类似局域网这样一对多或一对一这样的问题,中介类起到转发和存储对象的作用
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 setConcreteColleague1(ConcreteColleague1 colleague1){
this.colleague1 = colleague1;
}
public void setConcreteColleague2(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);
}
}
public class Test{
ConcreteMediator m = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1(m);
ConcreteColleague2 c2 = new ConcreteColleague2(m);
m.Colleague1 = c1;
m.Colleague2 = c2;
c1.Send("吃过饭了吗?");
c2.Send("没有呢,你打算请客?");
}