本文共 887 字,大约阅读时间需要 2 分钟。
代理模式
代理(Proxy)是一种设计模式,通过代理对象访问目标对象.
好处 可在目标对象实现的基础上,增加额外的功能,即提高扩展性
编程思想 不要随意去修改已写好的代码或者方法,如需修改,可通过代理的方式来扩展该方法
举例说明代理作用 假设我们想邀请一位明星,那么并不是直接联系明星,而是联系明星的经纪人.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想在现实中的一个例子
用图表示如下:
代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象
静态代理(类似于装饰者模式)
静态代理在使用时,代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法
静态代理总结:
优点 可以做到在不修改目标对象的功能前提下,对目标功能扩展.
缺点 代理对象需要与目标对象实现一样的接口,会产生很多代理类.同时,接口增加方法,目标对象与代理对象都要维护
动态代理
动态代理特点
代理对象,不需要实现接口 代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型) 动态代理也叫做,JDK代理,接口代理
JDK中生成代理对象的API
代理类所在包:java.lang.reflect.Proxy JDK实现代理只需要使用newProxyInstance方法,但是该方法需要接收三个参数,完整的写法是:static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )
注意该方法是在Proxy类中是静态方法,且接收的三个参数依次为:
ClassLoader loader
指定目标对象使用类加载器
Class<?>[] interfaces
目标对象实现的接口的类型
InvocationHandler h
事件处理,执行目标对象方法时,触发事件处理器方法,把执行目标对象的方法作为参数传入
转载地址:http://qpazi.baihongyu.com/