设计模式之代理模式-------动态代理
2017-07-28 16:20
274 查看
上一篇解释了什么是代理以及介绍了静态代理,这一篇,我们来谈谈动态代理,动态代理在我我的理解中,是它不必在向静态代理那样为每一个目标对象都创建一个代理类,直接一个类就够了,可以想到我们使用了一个Object对象的引用,然后通过反射达到代理的作用。具体代码。
定义接口,我们要通过代理来实现的功能。
被代理的类,我们不实例化这个类,来通过代理调用doField方法。
代理类,可以看到,我们创建了一个Object类,然后通过InvocationHandler里面的method.invoke传入了Object类,达到调用方法的目的
客户端调用
输出结果
相比静态代理,动态代理更加灵活,降低了代码之间的耦合性,只是简单的学习了一下,感觉还有很多东西,比如反射,比如AOP里的代理,加油!- -
定义接口,我们要通过代理来实现的功能。
public interface IUserDao { void doField(); }
被代理的类,我们不实例化这个类,来通过代理调用doField方法。
public class UserDao implements IUserDao{ public void doField() { System.out.println("动态代理------------------------"); } }
代理类,可以看到,我们创建了一个Object类,然后通过InvocationHandler里面的method.invoke传入了Object类,达到调用方法的目的
public class MyProxy { private Object target; public MyProxy(Object target) { this.target = target; } public Object getProInstance() { return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("我开始工作了"); Object objectValue = method.invoke(target,args); System.out.println("我结束工作了"); return objectValue; } }); } }
客户端调用
public class Client { public static void main(String args[]) { UserDao userDao = new UserDao(); System.out.println(userDao.getClass()); IUserDao proxyInstance = (IUserDao) new MyProxy(userDao).getProInstance(); System.out.println(proxyInstance.getClass()); proxyInstance.doField(); }
输出结果
class dynamicProxy.UserDao class com.sun.proxy.$Proxy0 我开始工作了 动态代理------------------------ 我结束工作了
相比静态代理,动态代理更加灵活,降低了代码之间的耦合性,只是简单的学习了一下,感觉还有很多东西,比如反射,比如AOP里的代理,加油!- -
相关文章推荐
- 反射-动态代理设计模式
- 大话设计模式(三)动态代理设计模式
- 设计模式之动态代理
- 用java调用编译器编译java文件-马士兵设计模式教程-动态代理 .
- 设计模式之动态代理模式
- 设计模式02-动态代理模式
- 我的设计模式学习之路3(动态代理)
- java设计模式---动态代理(简单笔记)
- 设计模式-动态代理
- java 设计模式 代理 静态和动态
- Java设计模式Proxy之动态代理
- 设计模式之 动态代理模式
- Java设计模式——代理模式(静态代理vs动态代理)
- java设计模式之动态代理
- Java设计模式之 静态代理和动态代理
- InvocationHandler+工厂设计模式 实现动态代理
- Android设计模式之动态代理,实现方法拦截功能
- 10分钟看懂动态代理设计模式
- 设计模式(3) 代理模式 动态代理
- 设计模式之--代理模式(动态代理)