Java代理模式.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Java代理模式.docx》由会员分享,可在线阅读,更多相关《Java代理模式.docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Java代理模式By zvane79 s: blog, 1 .代理模式代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直 接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式一般涉及到三个角色:抽象角色:声明真实对象和代理对象的共同接口;代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同 的接口以便在任何时刻都能代替真实对象。同时丁代理对象可以在执行真实对象操作时,附加其他的操作,相当于 对真实对象进行封装。真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。抽
2、象主题类Subjectabstract+ Request ()ProxyRealSubject-realSubject : RealSubject+ Request ()+ Request ()具体主题类代理类,其维护一个具体主题类为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层, 能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上 获得了更大的灵活性。Java动态代理机制以巧妙的方式近乎完美地实践了代理模式的设计理念。2 .静态代理public interfac
3、e Subject void operationl ();void operation2(String arg);public class Subjectlmpl implements Subject public void operationl () System, out. printin (方法调用 1); public void opration2(String arg) System, out .printin (方法调用2 with args + arg); )public class ProxySubject implements Subject private Subject
4、srcObject; / 被代理对象public ProxySubject(Subject srcObject) this.srcObj ect = srcObject; ) public void operationl () System.out.printIn(Proxyer do operationl); srcObject.operationl(); ) public void operation2(String arg) System.out.printin(HProxyer do operation2 with n + arg); srcObject.operation2(arg)
5、; ) ).动态代理动态代理的本质用来实现对目标对象进行增强,最终表现为类,只不过是动态创立子类,不用手工生成子类。动态代理的限制只能在父类方法被调用之前或之后进行增强(功能的修改),不能在中间进行修改,要想在方法调用中增强,需 要ASM(一个Java字节码操作和分析框架)OInterfaceX1. JDK动态代理官方,不能代理类,只能代理接口2. CGLIB动态代理非官方,基于ASM,能代理类和接口,不能代理final类3.1 Jdk动态代理使用首先让我们来了解一下如何使用Java动态代理。具体有如下四步骤:1 .通过实现InvocationHandler接口创立自己的调用处理器,实现接口方
6、法invoke;2 .通过为Proxy类指定ClassLoader对象和一组interface来创立动态代理类;3 .调用动态代理对象的接口方法public class DynamicProxyHandler implements InvocationHandler /代理模式中介绍的RalSubjct对象。private Object srcObject;public DynamicProxyHandler(Object srcObject) this.srcObject = srcObject; )/设tl一个类用于实现工nvocationHandl接口,InvocationHandler
7、是代理实例的调用处理程序实现的接口。/对应invoke参数:/ 1 study .proxy -在其上调用方法的代理实例;/ 2 method -对应于在代理实例上调用的接口方法的Method实例;/ 3args -包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,那么为nullopublic Object invoke(Object proxy, Method method. Object args) throws Throwable System, out .printin ( before method ., *);return method.invoke(srcOb
8、ject, args); ) )public class DynamicProxyDemo public static void main(String args) Subject proxy = (Subject) Proxy.oxyinstance(Subject.class.getClassLoader()z new Class Subject.class , new DynamicProxyHandler(real);subject.operation1 ();) )JDK动态代理的序列图实现动态代理思路如何实现动态代理呢?1 .动态产生Java代码和class.动态生成的代理类必须要
9、继承接口 A,并需要一个handler接口成员变量,该handler接口在外部由用户自己实 现,实现功能的扩展。2 .代理类中的对接口 A方法的调用,即调用handle.invoke接口方法即可。2.4 JDK动态代理实现-类和接口要了解Java动态代理的机制,首先需要了解以下相关的类或接口:2.4.1这是Java动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象。清单1. Proxy的静态方法/方法1:该方法用于获取指定代理对象所关联的调用处理器static InvocationHandler getlnvocationHandler(Object proxy)/方
10、法2:该方法用于获取关联于指定类装载器和一组接口的动态代理类的类对象static Class getProxyClass (ClassLoader loader, Class口 interfaces) /方法3:该方法用于判断指定类对象是否是一个动态代理类 static boolean isProxyClass(Class cl)/方法4:该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例static Object newProxylnstance(ClassLoader loader, Class interfaces, InvocationHandler h) 备注:inte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 代理 模式
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内