代理模式:我很忙,没空理你,你要找我的代理人。代理人总要知道代理人哪些事情能做哪些事情不能做,那就是两个人具备同一个接口,代理人不能干活,被代理人能干活啊。
例子:西门庆找潘金莲,潘金莲“害羞”啊,咋办,那找代理人啊,嗯,王婆就很合适嘛。
/**
* Created by xpeng on 2018/4/30.
* 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
*/
public interface KindWomen {
//这种类型的女人能做什么事情呢?
public void makeEyesWithMan();//抛媚眼
public void happyWithMan();//这个可有意思了
}
一种类型嘛,那肯定是接口,然后定义潘金莲:
/**
* Created by xpeng on 2018/4/30.
* 定一个潘金莲是什么样的人
*/
public class PanJinLian implements KindWomen {
@Override
public void makeEyesWithMan() {
Log.e("xyz"," 小潘抛媚眼 ");
}
@Override
public void happyWithMan() {
Log.e("xyz"," 那个啥,你懂的 ");
}
}
在定义一个大大狡猾的老王婆:
/**
* Created by xpeng on 2018/4/30.
* 王婆这个人老奸巨猾,她太老咯,是个男人就看不上
* 但是大大的狡猾啊,所以她作为一类女人的代理!
*/
public class WangPo implements KindWomen {
private KindWomen kindWomen;
public WangPo(){
this.kindWomen = new PanJinLian();
}
//他/她可以是KindWomen的任何一个女人的代理,只要你是这一类型
public WangPo(KindWomen kindWomen){
this.kindWomen = kindWomen;
}
@Override
public void makeEyesWithMan() {
this.kindWomen.happyWithMan();//自己嘛那个啥,找年轻人代替
}
@Override
public void happyWithMan() {
this.kindWomen.makeEyesWithMan();//同理,年纪一大把别吓到别人,造孽啊,找人代替
}
}
好啦,西门庆大官人闪亮登场
WangPo wangPo1 = new WangPo();
wangPo1.happyWithMan();//实际上是小潘哦
wangPo1.makeEyesWithMan();//小潘
Log.e("xyz"," 小潘 ");
这就是一个活生生的例子,通过代理人实现某种目的,如果去掉王婆这个代理人的话,西门庆大官人和潘金莲小娘子勾搭还是挺麻烦的,成不成有的说咯。
好,那么问题来了,要是凤姐姐在那个时候,并且和西门庆大官人对上眼了,那我们也可以让王婆代理嘛,嗯,口味稍微有点重咯。
/**
* Created by xpeng on 2018/4/30.
* 定义一个西门庆,这家伙,唉,也算是一个人才咯
*/
public class FengJieJie implements KindWomen {
@Override
public void makeEyesWithMan() {
Log.e("xyz"," 凤姐姐抛媚眼咯。。。。。。。。 ");
}
@Override
public void happyWithMan() {
Log.e("xyz"," 凤姐姐在和西门庆大公子happy啦啦啦啦。。。 ");
}
}
西门大官人闪亮登场:
FengJieJie fengJieJie = new FengJieJie();
WangPo wangPo = new WangPo(fengJieJie);//让王婆作为凤姐姐的代言人
wangPo.makeEyesWithMan();//实际上是凤姐姐
wangPo.happyWithMan();//实际上是凤姐姐
Log.e("xyz","凤姐姐");
总结一下,代理模式主要使用了Java的多态,干活的是被代理类,代理类主要接活,那怎么知道被代理类能不能干呢,同一个借口呗。