//20210129
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现命令模式
中介者模式核心思想
- 设置一个中介者,来通信所有相关的类
- 举例:MVC模型,Controller(C)是Model(M)和View(V)的中介,负责通信二者,解读消息
程序源代码:
- 这里为了方便理解,实现了一个美国、伊拉克通过中介(联合国安理会)沟通的场景
/**
* 抽象国家类
*/
public abstract class Country {
protected UnitedNations unitedNations;//每个国家都要声明中介者
public Country(UnitedNations unitedNations){
this.unitedNations = unitedNations;
}
}
/**
* 抽象中介----联合国,有调和各国关系的功能
*/
public abstract class UnitedNations {
public abstract void declare(String message,Country country);
}
/**
* 美国实现类
*/
public class USA extends Country{
public USA(UnitedNations unitedNations){
super(unitedNations);
}
public void declare(String message){
unitedNations.declare(message,this);
}
public void acquireMessage(String message){
System.out.println("美国获得对方信息:" + message);
}
}
/**
* 伊拉克实现类
*/
public class Iraq extends Country{
public Iraq(UnitedNations unitedNations){
super(unitedNations);
}
public void declare(String message){
unitedNations.declare(message,this);
}
public void acquireMessage(String message){
System.out.println("伊拉克获得对方信息:" + message);
}
}
/**
* 联合国安理会实现类
*/
public class UnitedNationsSecurityCouncil extends UnitedNations{
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(country == usa) {
iraq.acquireMessage(message);
} else {
usa.acquireMessage(message);
}
}
}
/**
* 测试主类
*/
public class Main {
public static void main(String[] args) {
UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();
USA usa = new USA(UNSC);
Iraq iraq = new Iraq(UNSC);
UNSC.setUsa(usa);
UNSC.setIraq(iraq);
usa.declare("不准研制核武器");
iraq.declare("我们没有核武器");
}
}
- 输出如下
以上
希望对大家有所帮助