动态代理模式

来源:互联网 发布:算法 第四版 中文 pdf 编辑:程序博客网 时间:2024/06/06 05:17

承接上一篇静态代理模式,静态代理模式把代码写的死死地,动态代理就不一样了

还是用潘金莲西门庆的例子把,这次王婆用了动态代理的新技术,能承接更多的活了(羞耻脸)

首先呢,所有坏女人的接口

package cn.com.dynamicProxy2;public interface Women {/** *要实现动态代理模式,必须对所有的要被代理的类实现一个统一接口,因为如果没有这个借口 *那么'代理'概念就无从谈起,被代理的实现具体类要想调用他的方法,不能自己来调用把, *必须有一个代理,那么如果这时候有一个接口,用接口配合类反射来实现,那就说得通了 * *所有女生的接口对象 *  * @author ZJF * @time 2016-7-5-21-30 */public void MakingLove() ;}

想要和西门庆行苟且事的女人们:
package cn.com.dynamicProxy2;public class BadWomen implements Women {@Overridepublic void MakingLove() {System.out.println("BadWomen正在和西门庆行苟且之事");}}

接下来呢,王婆出场,用了新技术业务拓展了,不仅只能接潘金莲的单子了,现在承接一切业务
package cn.com.dynamicProxy2;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class Wangpo implements InvocationHandler {//想要和西门庆行苟且之事的女人private Object womenWhoWantSexWithX ;//那些真正想要找西门庆的那些女人不好意思自己去,怎么办呢,找王婆啊//王婆说: 哦!那好,既然你们这么多人想要和西门庆勾搭,那我就不写死了,我用Object类型的你们//用类反射来调用你们的方法,这样省事啊//这个newProxyInstance我只知道是它是用来干嘛的,还没搞懂他的原理和他的参数的意识public Object newProxyInstance(Object targetObject){womenWhoWantSexWithX = targetObject ;return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),   targetObject.getClass().getInterfaces(),   this) ;}//王婆重写invoke方法,在@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("王婆先收取一半的佣金");method.invoke(womenWhoWantSexWithX, args) ;System.out.println("西门庆完事了穿衣服,顺便点了根事后烟,王婆管西门庆要了剩下的那一半");return null;}}


西门庆出场,又去找王婆了
package cn.com.dynamicProxy2;public class Ximenqing {public static void main(String[] args) {//西门庆找到了王婆Wangpo wp = new Wangpo() ;//王婆她联系了那淫妇Women w = (Women) wp.newProxyInstance(new BadWomen()) ;w.MakingLove();}}

运行结果:
王婆先收取一半的佣金BadWomen正在和西门庆行苟且之事西门庆完事了穿衣服,顺便点了根事后烟,王婆管西门庆要了剩下的那一半

很不雅的例子,不过很能说清楚问题不是吗?



1 0
原创粉丝点击