动态代理模式
来源:互联网 发布:算法 第四版 中文 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
- 代理模式--动态代理
- 代理模式 & 动态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式之动态代理
- java代理模式--动态代理
- 代理模式之动态代理
- 代理模式之动态代理
- 代理模式之动态代理
- 代理模式和动态代理
- 代理模式与动态代理
- Java Date和MySQL datetime数据类型转换
- R语言找出数据集中有缺失值的行,将其记录到另一个数据框中,并产生一个无缺失值的数据集
- 标准模板库
- 【Java进阶七】内部类
- C++11中auto的使用
- 动态代理模式
- java 对象之间属性值复制
- 232. Implement Queue using Stacks
- CodeForces 686 B
- Object类的toString方法
- 动态规划--背包问题
- 浅谈CSRF攻击与防御
- LeetCode(七)——Valid Anagram
- Object类之equals方法