《大话设计模式》第二十五章
package ch25;
public abstract class Country {
protected UnitedNations mediator;
public Country(UnitedNations mediator) {
this.mediator = mediator;
}
}
package ch25;
public abstract class UnitedNations {
public abstract void declare(String message, Country colleague);
}
package ch25;
public class Irag extends Country {
public Irag(UnitedNations mediator) {
super(mediator);
}
public void declare(String message) {
mediator.declare(message, this);
}
public void getMessage(String message) {
System.out.println("伊拉克获得对方信息:" + message);
}
}
package ch25;
public class USA extends Country {
public USA(UnitedNations mediator) {
super(mediator);
}
public void declare(String message) {
mediator.declare(message, this);
}
public void getMessage(String message) {
System.out.println("美国获得对方信息:" + message);
}
}
package ch25;
public class UnitedNationsSecurityCouncil extends UnitedNations {
private USA colleague1;
private Irag colleague2;
public void setColleague1(USA colleague1) {
this.colleague1 = colleague1;
}
public void setColleague2(Irag colleague2) {
this.colleague2 = colleague2;
}
@Override
public void declare(String message, Country colleague) {
if (colleague == colleague1) {
colleague2.getMessage(message);
} else {
colleague1.getMessage(message);
}
}
}
package ch25;
/**
* 中介者模式
* @author Administrator
*
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
UnitedNationsSecurityCouncil unsc = new UnitedNationsSecurityCouncil();
USA c1 = new USA(unsc);
Irag c2 = new Irag(unsc);
unsc.setColleague1(c1);
unsc.setColleague2(c2);
c1.declare("不准研制核武器,否则要发动战争");
c2.declare("我们没有核武器,也不怕侵略");
}
}
运行:
伊拉克获得对方信息:不准研制核武器,否则要发动战争
美国获得对方信息:我们没有核武器,也不怕侵略
中介者模式和代理模式,很相似,有何区别?
中介者模式:多个事物之间是有联系的,他们之间进行通信,比如上面,美国对伊拉克说,是两个事物通信,中间通过联合国;
代理模式:不存在多个事物之间的消息通信。proxy代理甲做事,真正做事的是甲,但是甲不会去和另外一个人发生联系,即使有联系,也不是通过proxy。