长这么大,朕从来没有听说哪个皇帝只有一个媳妇的,但是作为一名圣明与仁爱并存的帝王,朕只有yyj这个光杆皇后,因此朕要纳妃!
先给自己发一个呵呵!以上想法纯属扯淡!朕是绝对不会乱纳妃的,但是帝王毕竟是帝王,有时候装装样子还是要有的。
自己的媳妇当然是自己挑啦,不然看着不顺眼咋办,因此朕决定,要开启纳妃之路。朕要三下江南,选尽世间美貌之女子,尽收帐下!
先上个流程图压压惊:
方案是有了,但是每次选妃都要朕亲自出行,一是劳民伤财,朕于心不忍;二是这样做着实不太像样子。
朕仔细思考一番,朕既然有此困惑,其他的朝代的皇帝是不是也有,难不成每个皇帝选妃都要自己跑一圈不成?那不被史官骂死了?这就可以用到代理模式!
皇上爱玩,出去选个妃什么的还能逛一圈江南。下面就先看一下朕是怎么选妃的。
我们需要一个GirlSearcher接口,里面有三个方法:travel,search,get。分别代表:出行江南!寻得一美人!收入帐下!
然后EmperorGirlSearcher实现了GirlSearcher接口,表示的是皇上。
Scene是场景类,里面描述了皇上选妃的流程。
public interface GirlSearcher {
public void travel();
public void search();
public void get();
}
public class EmperorGirlSearcher implements GirlSearcher{
private static EmperorGirlSearcher emperorGirlSearcher = new EmperorGirlSearcher();
private EmperorGirlSearcher(){}
public static EmperorGirlSearcher getInstance() {
return emperorGirlSearcher;
}
@Override
public void travel() {
System.out.println("出行江南!");
}
@Override
public void search() {
System.out.println("寻得一美人!");
}
@Override
public void get() {
System.out.println("收入帐下!");
}
}
public class Scene {
public static void main(String[] args) {
GirlSearcher emperor = EmperorGirlSearcher.getInstance();
//皇上亲自出发!
//第一次选妃
emperor.travel();
emperor.search();
emperor.get();
//第二次选妃
emperor.travel();
emperor.search();
emperor.get();
}
}
场景类里面描述了朕两次选妃的流程,下面看一下运行结果。
出行江南!
寻得一美人!
收入帐下!
出行江南!
寻得一美人!
收入帐下!
作为一代明君,自己当然不能这么不像话,而且也累。因此就需要有人来代朕出行。这就是代理模式,朕选择一个小太监去江南晃悠一圈。
GirlSearcher接口和EmperorGirlSearcher不变,我们新加一个EunuchProxyGirlSearcher太监类。然后修改一下场景类。
public class EunuchProxyGirlSearcher implements GirlSearcher {
private GirlSearcher girlSearcher = null;
public EunuchProxyGirlSearcher(GirlSearcher girlSearcher) {
this.girlSearcher = girlSearcher;
}
@Override
public void travel() {
this.girlSearcher.travel();
}
@Override
public void search() {
this.girlSearcher.search();
}
@Override
public void get() {
this.girlSearcher.get();
}
}
可以看出,在新的场景类中,是太监代替朕出行了。运行结果和之前差不多。
public class ProxyScene {
public static void main(String[] args) {
GirlSearcher emperor = EmperorGirlSearcher.getInstance();
GirlSearcher eunuch = new EunuchProxyGirlSearcher(emperor);
//由小太监替皇上出行
//第一次选妃
eunuch.travel();
eunuch.search();
eunuch.get();
//第二次选妃
eunuch.travel();
eunuch.search();
eunuch.get();
}
}
代理模式有多种应用场合,如下所述: