好贷网好贷款

黑马程序员-Java语言基础加强-动态代理模式

发布时间:2016-12-3 21:56:27 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"黑马程序员-Java语言基础加强-动态代理模式",主要涉及到黑马程序员-Java语言基础加强-动态代理模式方面的内容,对于黑马程序员-Java语言基础加强-动态代理模式感兴趣的同学可以参考一下。

Java语言基础加强-代理模式 ----------  android培训、java培训、期待与您交流!  ---------- 代理的基本概念 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 常见的代理有: 1. 远程代理(RemoteProxy)为一个对象在不同的地址空间提供局部代表。 2. 虚代理(VirtualProxy)根据需要创建开销很大的对象。 3. 保护代理(ProtectionProxy)控制对原始对象的访问。 4. 智能指引(SmartReference)取代了简单的指针,它在访问对象时执行一些附加操作。 代理的参与者: 1. Proxy:保存一个引用使得代理可以访问实体。若RealSubject和Subject的接口相同,Proxy会引用Subject。提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。控制对实体的存取,并可能负责创建和删除它。其他功能依赖于代理的类型 2. RemoteProxy:负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。 3. VirtualProxy:可以缓存实体的附加信息,以便延迟对它的访问。 4. ProtectionProxy:检查调用者是否具有实现一个请求所必需的访问权限。 5. Subject:定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。 6. RealSubject:定义Proxy所代表的实体。 代码示例: public interface Object { void action(); }public class ProxyObject implements Object { Object obj; public ProxyObject() { System.out.println("这是代理类"); obj = new ObjectImpl(); } public void action() { System.out.println("代理开始"); obj.action(); System.out.println("代理结束"); } }public class ObjectImpl implements Object { public void action() { System.out.println("========"); System.out.println("========"); System.out.println("这是被代理的类"); System.out.println("========"); System.out.println("========"); } public class ObjectImpl implements Object { public void action() { System.out.println("========"); System.out.println("========"); System.out.println("这是被代理的类"); System.out.println("========"); System.out.println("========"); } } public class Test { public static voidmain() { Objectobj = new ProxyObject(); obj.action(); } } 通过代理类这一中间层,能够有效控制对实际委托类对象的直接访问,也可以很好地隐藏和保护实际对象,实施不同的控制策略,从而在设计上获得了更大的灵活性。 动态代理 所谓动态代理,是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些 interface。你当然可以把该class的实例当作这些interface中的任何一个来用。 实现动态代理类的分类 这个分类依据的是JVM是否可以从目标类是否实现了某些特定的接口来获取目标类的各个功能。这个依据可以指示JVM根据目标类中有哪些功能在对应的代理类中实现 1.     通过JVM生成动态代理类 前提:要求目标类必须实现某些接口 JVM生成的动态代理类只能作用于具有相同接口目标类的代理类 局限性:要求目标类实现特定的接口才能生成和目标类对应的动态代理类 2.    通过第三方类库CGLIB生成动态代理类 适用的情况:目标类没有实现相应的接口,又需要为这个类动态生成代理类。此时第三方类库CGLIB是最好的选择。 CGLIB可以为目标类动态生成目标类的子类,并把这个动态生成的子类作为这个类的代理类。 代理类为目标代码添加交叉业务(切面)的位置 代理类的各个方法通常要调用目标类相应的方法,并将目标类对应方法的返回结果作为自身的返回值提供给外界。这个时候,代理类可以在以下位置为对应目标类中对应的方法增加指定的交叉业务代码: 1.    在调用目标类的目标方法之前 2.    在调用目标类的目标方法之后 3.    在调用目标类的目标方法之前和之后 4.    在调用目标类的目标方法异常的catch块中 ----------  android培训、java培训、期待与您交流!  ----------

上一篇:poj——1088(dp之递归加记忆化搜索)
下一篇:润乾报表动态格间运算的概念与特征总结

相关文章

相关评论