代理类和被代理类实现同一个接口,所以被代理类能干的事代理类也能干,幕后还是交给被代理类来做,代理类还能做一些被代理类不能做的事,比如添加日志。
1.业务场景
西门庆找潘金莲干事,直接找不合适,就找了代理王婆
2.定义代理接口
public interface KindWomen {
// 这种类型的女人能做什么事情呢?
public void makeEyesWithMan(); // 抛媚眼
public void happyWithMan(); //happy what? You know that!
}
3.定义潘金莲实现接口
public class PanJinLian implements KindWomen {
public void happyWithMan() {
System.out.println("潘金莲在和男人做那个....." );
}
public void makeEyesWithMan() { System.out.println("潘金莲抛媚眼" );
}
}
4.定义王婆代理
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(); // 王婆这么大年龄了,谁看她抛媚眼?! }
}
5.定义西门庆
public class XiMenQing {
public static void main(String[] args) {
// 把王婆叫出来
WangPo wangPo = new WangPo();
//然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏 : wangPo.makeEyesWithMan(); // 看到没,虽然表面上时王婆在做,实际上爽的是潘金莲 wangPo.happyWithMan(); }
}
网友评论