中介者模式,听名字应该很好理解。
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互,
中介者是对象不需要显式的的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
也就是两个类不自己关联,而给中介者去完成相互之间的事情。
先看类图吧:
如上图,ConcreteColleague1和ConcreteColleague2分别是两个具体的待交互的类。
而ConcreteMediator充当具体的中介者。
Mediator的出现减少了各个Colleague的耦合,使得可以独立的改变和福永各个Colleague和Mediator。
中介者模式一般应用于一组对象以定义良好但是复杂的方式进行 通信 的场合,
以及想定制一个分布在多个类中的行为,而又不想生成太多子类的场合。
下面看具体类源代码:
Mediator类:
package com.blog.anla.Mediator;
/**
* 定义一个抽象的发送消息方法,
* 得到同事对象和发送消息
* @author U-ANLA
*
*/
public abstract class Mediator {
public abstract void send(String message,Colleague colleague);
}
ConcreteMediator类:
package com.blog.anla.Mediator;
public class ConcreteMediator extends Mediator{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public void setColleague1(ConcreteColleague1 colleague1) {
this.colleague1 = colleague1;
}
public void setColleague2(ConcreteColleague2 colleague2) {
this.colleague2 = colleague2;
}
@Override
public void send(String message, Colleague colleague) {
if(colleague == colleague1){
colleague2.notify(message);
}else{
colleague1.notify(message);
}
}
}
Colleague类:
package com.blog.anla.Mediator;
public class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator){
this.mediator = mediator;
}
}
ConcreteColleague1类:
package com.blog.anla.Mediator;
public 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);
}
}
ConcreteColleague2类:
package com.blog.anla.Mediator;
public 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);
}
}
从代码中可以看到,colleague1和colleague2之间并没有交际,
他们的交集都是交由给ConcreteMediator的send方法来实现的。
是吧,如果有帮助,顶一下哇
赠人玫瑰手留余香(oo)