中介者模式:用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。
就是说我们需要传递两个对象之间的消息时,比如说A对象必须知道B对象的消息,然后做出响应。一般的解决办法就是将这两个对象都写到一个类里,由这个类来接收B对象的信息,然后用if else来判断A对象该怎么执行。
中介者模式提供了一种方法,A和B各自不需要知道,只需要将消息发给一个中介者类,由中介者来调用相应类来处理。这样就将交互过程都写到中介者中,降低了AB的耦合。
但是中介者必须知道AB对象,中介者模式使中介者变得非常复杂。
我们先声明联合国这个中介者接口
public interface IUnitNation {
void declare(String message, Country country);
}
然后还有国家的接口,可以看出,国家必须知道要向联合国提交申请和消息
public abstract class Country {
protected IUnitNation unitNation;
public Country(IUnitNation unitNation) {
this.unitNation = unitNation;
}
public abstract void declare(String message);
public abstract void getMessage(String message);
}
public class USA extends Country {
public USA(IUnitNation unitNation) {
super(unitNation);
}
@Override
public void declare(String message) {
unitNation.declare(message, this);
}
@Override
public void getMessage(String message) {
System.out.println("USA 获得消息:" + message);
}
}
public class Iraq extends Country {
public Iraq(IUnitNation unitNation) {
super(unitNation);
}
@Override
public void declare(String message) {
unitNation.declare(message, this);
}
@Override
public void getMessage(String message) {
System.out.println("Iraq 获得消息:" + message);
}
}
安理会是具体联合国组织,它必须知道每个国家,并对传达它们之间的消息
public class UnitedNationSecurityCouncil implements IUnitNation {
private USA usa;
private Iraq iraq;
public void setUSA(USA usa) {
this.usa = usa;
}
public void setIraq(Iraq iraq) {
this.iraq = iraq;
}
@Override
public void declare(String message, Country country) {
if (usa == country) {
iraq.getMessage(message);
}
else {
usa.getMessage(message);
}
}
}
最后看主程序:
UnitedNationSecurityCouncil UNSC = new UnitedNationSecurityCouncil();
USA usa = new USA(UNSC);
Iraq iraq = new Iraq(UNSC);
UNSC.setUSA(usa);
UNSC.setIraq(iraq);
usa.declare("我要干掉你!");
iraq.declare("who 怕 who!");
每个国家必须在安理会设置代表:USA usa = new USA(UNSC);
Iraq iraq = new Iraq(UNSC);
安理会也必须设置这些国家的理事国地位:UNSC.setUSA(usa);
UNSC.setIraq(iraq);
然后才能有能力在它们之间传递消息
结果:
Iraq 获得消息:我要干掉你!
USA 获得消息:who 怕 who!
658

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



