什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人(接口):
package com.fc.Proxy; public interface KindWoman { public void makeEyesWithMan(); //抛媚眼 }
然后定义潘金莲:
package com.fc.Proxy; public class PanJinlian implements KindWoman { public void makeEyesWithMan() { System.out.println("潘金莲在抛媚眼。。。"); } }
再来个王婆,也就是潘金莲的代理人:
package com.fc.Proxy; public class WangPo implements KindWoman { private KindWoman kindwoman; public WangPo() { this. kindwoman = new PanJinlian();//王婆默认是潘金莲的代理人 } //王婆也可以是KindWomen的其他任何一个女人的代理,只要你是这一类型 public WangPo(KindWoman kindWomen){ this. kindwoman = kindWomen; } public void makeEyesWithMan() { this. kindwoman.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!她代替别人抛 } }
连个女猪脚已经登场,下面到西门庆了:
package com.fc.Proxy; public class XiMenQing { public static void main(String[] args) { //把王婆叫出来 WangPo wangPo = new WangPo(); //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏: wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲 } }
好了现在王婆为西门庆代理完了,说不准她还得给别人代理,假设现在又来了个潘金莲2号:
package com.fc.Proxy; public class PanJinlian222 implements KindWoman { public void makeEyesWithMan() { System.out.println("潘金莲222在抛媚眼。。。"); } }
然后西门庆又来找王婆帮忙勾引潘金莲2号:修改西门庆:
package com.fc.Proxy; public class XiMenQing { public static void main(String[] args) { /* //把王婆叫出来 WangPo wangPo = new WangPo(); //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏: wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲 */ WangPo wangPo=new WangPo(new PanJinlian222());//这个不是默认代理,要往里传个参数 wangPo.makeEyesWithMan(); } }
说完这个故事,那额总结一下,代理模式主要使用了 Java 的多态,干活的是被代理类,代理类主要是
接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。
来自:设计模式
时间: 2024-10-05 05:57:50