二、代理模式
顾名思义,代理模式可以理解为本身没有空去处理一些事情,而将这些事情交给这个代理人去做。
例子:西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理。(有点少儿不宜)
可以先定义一类女人:这类女人可以干相同的事,也就是有一致的接口。
public interface KindWomen {
//这种类型的女人能做什么事情呢?
public void makeEyesWithMan(); //抛媚眼
public void happyWithMan(); //。。。
}
然后潘金莲实现这个接口,并实现里面的方法。
public class WangPo implements KindWomen {
private KindWomen kindWomen;
public WangPo(){ //默认的话,是潘金莲的代理
this.kindWomen = new PanJinLian();
}
//她可以是KindWomen的任何一个女人的代理,只要你是这一类型
public WangPo(KindWomen kindWomen){
this.kindWomen = kindWomen;
}
public void happyWithMan() {
this.kindWomen.happyWithMan(); //自己老了,干不了,可以让年轻的代 替
}
public void makeEyesWithMan() {
this.kindWomen.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!
}
}
西门庆出场:
public class XiMenQing {
public static void main(String[] args) {
//把王婆叫出来
WangPo wangPo = new WangPo();
//然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:
wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲
wangPo.happyWithMan(); }
}
当然也可以传入不同的参数,只要符合接口类型,都可以让王婆做代理。
WangPo wangPo = new WangPo(某某人); //让王婆作为某某人的代理人
总结:代理模式主要使用了Java中的多态,代理类接活让被代理类去执行,要实现这种功能的关键,就是大家都能干,即要有同一个接口。