背景
对情报的掌控程度决定着战争的胜负。我方有这样一个传奇般的间谍,同时为我方和敌方担任间谍,她的名字叫拉米亚。
我大概讲下她的传奇故事:首先声明,拉米亚不是人,不是骂她,她真的不是人。她是由影镜军团创造的人造人。一开始为影镜军团效力,后来作为间谍跑去了联邦军,在联邦军收集情报。在联邦军的时候又为联邦军搜集影镜军团的情报。由于被联邦军的正义打动,内心一直效力于联邦军。
所以我们就把她当成联邦军和影镜军团的信使((((φ(◎ロ◎;)φ))))。
实现
组织:有内部消息和外部情报
public abstract class Org {
/**
* 内部消息
*/
private String internalMessage;
/**
* 外部消息,又情报
*/
private String externalMessage;
public String getInternalMessage() {
return internalMessage;
}
public void setInternalMessage(String internalMessage) {
this.internalMessage = internalMessage;
}
public String getExternalMessage() {
return externalMessage;
}
public void setExternalMessage(String externalMessage) {
this.externalMessage = externalMessage;
}
public abstract void showInternalMessage();
public abstract void showExternalMessage();
}
联邦军
/**
* 联邦军
*/
public class Federation extends Org {
@Override
public void showInternalMessage() {
System.out.println("这里是联邦军内部,得到军团内部的消息:");
System.out.println(getInternalMessage());
}
@Override
public void showExternalMessage() {
System.out.println("这里是联邦军内部,得到来自间谍的消息:");
System.out.println(getExternalMessage());
}
}
影镜军团
/**
* 影镜军团
*/
public class ShadowMirror extends Org {
@Override
public void showInternalMessage() {
System.out.println("这里是影镜军团内部,得到军团内部的消息:");
System.out.println(getInternalMessage());
}
@Override
public void showExternalMessage() {
System.out.println("这里是影镜军团内部,得到来自间谍的消息:");
System.out.println(getExternalMessage());
}
}
间谍接口
public interface ISpy {
/**
* 泄露消息出去
*/
void revealMessage();
}
拉米亚
/**
* 拉米亚:很特殊的身份,同时作为联邦军和影镜军团的间谍,但实际上拉米亚是比较偏袒联邦军的,
* 情报必须真实,不然容易被察觉,所以拉米亚一般提供联邦军不是很重要的情报,而影镜的重要情报会毫无保留的提供给联邦军。
*/
public class Ramia implements ISpy {
private Federation federation;
private ShadowMirror shadowMirror;
public Ramia(Federation federation, ShadowMirror shadowMirror) {
super();
this.federation = federation;
this.shadowMirror = shadowMirror;
}
@Override
public void revealMessage() {
shadowMirror.setExternalMessage(federation.getInternalMessage());
shadowMirror.showExternalMessage();
System.out.println("---------------");
federation.setExternalMessage(shadowMirror.getInternalMessage());
federation.showExternalMessage();
}
}
测试
public class Test {
public static void main(String[] args) {
Federation federation = new Federation();
federation.setInternalMessage("今晚8点我们将举行一个生日晚会!");
ShadowMirror shadowMirror = new ShadowMirror();
shadowMirror.setInternalMessage("我们打算12月12号那天偷袭联邦军总部!");
ISpy ramia = new Ramia(federation, shadowMirror);
ramia.revealMessage();
}
}
测试结果
这里是影镜军团内部,得到来自间谍的消息:
今晚8点我们将举行一个生日晚会!
---------------
这里是联邦军内部,得到来自间谍的消息:
我们打算12月12号那天偷袭联邦军总部!
总结
中介者模式对对象之间的交互进行了解耦。