您的位置:首页 > 编程语言 > Java开发

java设计模式——中介者模式

2013-02-22 21:08 375 查看
《大话设计模式》第二十五章

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: