一、 定义
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
中介者减少了其他一系列对象的交互,但是由于对其他一系列对象控制集中到了中介者类上,如果此类出现问题,则整个系统都会出问题。选用中介者模式要考虑清楚,尤其是多对多的关系时。
二、 结构图

三、 示例代码(以联合国为中介者,发布其他国家的声明)
package org.example.mediatormodel;
public interface Mediator {
public void Declare(String mes,Country ct);
}
package org.example.mediatormodel;
public abstract class Country {
private String ctName="";
private String mes;
private Mediator mediator;
// public abstract void SetMediator(Mediator mediator);
public abstract void Declare(String mes,Mediator mediator);
public abstract void GetMessage(String mes);
public String getCtName() {
return ctName;
}
public void setCtName(String ctName) {
this.ctName = ctName;
}
public Mediator getMediator() {
return mediator;
}
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
public String getMes() {
return mes;
}
public void setMes(String mes) {
this.mes = mes;
}
}
package org.example.mediatormodel;
public class USA extends Country {
// private String mes;
// private Mediator mediator;
// public void SetMediator(Mediator mediator){
// super.getMediator() = mediator;
// }
@Override
public void Declare(String mes,Mediator mediator) {
setMes(mes);
mediator.Declare(mes,this);
}
@Override
public void GetMessage(String mes) {
System.out.println("usa:" + mes);
}
}
package org.example.mediatormodel;
public class China extends Country {
// private String mes;
// private Mediator mediator;
// public void SetMediator(Mediator mediator){
// this.mediator = mediator;
// }
@Override
public void Declare(String mes, Mediator mediator) {
setMes(mes);
mediator.Declare(mes,this);
}
@Override
public void GetMessage(String mes) {
System.out.println("china:" + mes);
}
}
package org.example.mediatormodel;
public class UnionMediator implements Mediator {
private USA usa;
private China china;
@Override
public void Declare(String mes,Country ct) {
if (ct == usa){
usa.GetMessage(mes);
}else if (ct == china){
china.GetMessage(mes);
}
// System.out.println(ct.getCtName() + "声明了" + mes);
}
public China getChina() {
return china;
}
public void setChina(China china) {
this.china = china;
}
public USA getUsa() {
return usa;
}
public void setUsa(USA usa) {
this.usa = usa;
}
}
package org.example.mediatormodel;
public class MediatorModelTest {
public static void main(String[] args) {
UnionMediator um = new UnionMediator();
USA usa = new USA();
usa.setCtName("USA");
usa.setMediator(um);
China china = new China();
china.setCtName("CHINA");
china.setMediator(um);
um.setUsa(usa);
um.setChina(china);
um.Declare("usaaaa",usa);
um.Declare("keep peace",china);
}
}
2260

被折叠的 条评论
为什么被折叠?



