收藏 分享(赏)

代理模式.docx

上传人:HR专家 文档编号:5969284 上传时间:2019-03-22 格式:DOCX 页数:8 大小:40.11KB
下载 相关 举报
代理模式.docx_第1页
第1页 / 共8页
代理模式.docx_第2页
第2页 / 共8页
代理模式.docx_第3页
第3页 / 共8页
代理模式.docx_第4页
第4页 / 共8页
代理模式.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、文档编号:xxxx代理模式文档编号:xxxxI目录1 代理模式 11.1 代理模式 .11.2 代理模式的使用场景 11.3 代理模式的分类 .11.4 代理模式的本质 .22 静态代理 22.1 静态代理的实现 .23 动态代理 43.1 动态代理的实现 .4文档编号:xxxx11 代理模式1.1代理模式代理模式是常用的 java 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后 处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类

2、的 对象的相关方法,来提供特定的服务。1.2代理模式的使用场景代理模式使用场景非常多,如面向切面编程(Spring 中的 AOP) ,虚代理模式(hibernate中的懒加载) ,保护代理(权限服务控制) ,远程代理(Java 中的 RMI 技术)等。1.3代理模式的分类按照代理的创建时期,代理类可以分为两种。 (1 )静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class 文件就已经存在了。 (2 )动态代理:在程序运行时,运用反射机制动态创建而成。按照代理用途来分类:(1 ) 虚代理:根据需求来创建开销很大的对象,该对象只有在需要的时候才会被真正的被

3、创建。(2 ) 远程代理:用来在不同的地址空间上代表同一对象,这个不同的地址空间可以使在本机也可以是在其他机器上。在 Java 里面最典型的就是 RMI 技术。(3 ) Copy-on-write 代理:在客户端操作的时候,只有对象确实改变了才会真的拷贝一个目标对象,算是虚代理的一个分支。(4 ) 保护代理:控制原始对象的访问,如果有需要,可以给不同的用户提供不同的访问权限,以控制他们对原始对象的访问。(5 ) Cache 代理:为那些昂贵操作的结构提供临时的存储空间,以便多个客户端可以共享这些结果。(6 ) 智能代理:在访问对象时执行一些附加操作,比如,对指向实际对象的引用计数,第一次引用一

4、个持久对象时,将它装入内存等。(7 ) 防火墙代理:保护对象不被恶意程序访问和操作。(8 ) 同步代理:使多个用户能够同时访问目标对象而不发生冲突。文档编号:xxxx21.4代理模式的本质代理模式的本质:控制对象的访问。2 静态代理2.1静态代理的实现(1 ) ,代理接口package com.proxy;/* 代理接口* author xmong*/public interface TestProxy /* 代理接口方法*/public void doSomething();(2 ) ,代理实现package com.proxy;/* 代理实现类-被代理的对象* author xmong*/

5、public class TestProxyImpl implements TestProxy/* 代理实现方法*/public void doSomething() System.out.println(“test proxy do something.“);文档编号:xxxx3(3 ) ,静态代理package com.proxy;/* 静态代理实现-静态代理对象* author xmong*/public class TestStaticProxy implements TestProxy/代理接口TestProxy testProxy;/* 构造静态代理,初始化被代理对象*/publi

6、c TestStaticProxy()this.testProxy = new TestProxyImpl();/* 构造静态代理,初始化可接收被代理对象* param testProxy*/public TestStaticProxy(TestProxy testProxy)this.testProxy = testProxy;/* 代理方法*/public void doSomething() System.out.println(“static proxy do something.“);this.testProxy.doSomething();文档编号:xxxx4(4 ) ,测试静态代

7、理package com.proxy;/* 测试代理* author xmong*/public class Test /* 测试静态代理方法* 输出结果* static proxy do something.* test proxy do something.*/public void testStaticProxy()TestStaticProxy sp = new TestStaticProxy();sp.doSomething();/* main 方法* param args*/public static void main(String args) Test t = new Test

8、();t.testStaticProxy();3 动态代理3.1动态代理的实现同理静态代理,创建好代理接口和代理实现。(1 ) ,动态代理package com.proxy;文档编号:xxxx5import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/* 动态代理实现-动态代理对象* author xmong*/public class TestDynamicProxyHandler implements InvocationHandler

9、 /* 被代理目标对象*/private Object targetObject;/* 创建被代理对象* param targetOjbect* return*/public Object createProxy(Object targetOjbect)this.targetObject = targetOjbect;return Proxy.newProxyInstance(targetOjbect.getClass().getClassLoader(),targetOjbect.getClass().getInterfaces(), this);/* 动态代理方法*/Overridepub

10、lic Object invoke(Object proxy, Method method, Object args)throws Throwable Object result = null;System.out.println(“dynamic proxy do something.“);result = method.invoke(this.targetObject, args);return result;(2 ) ,测试动态代理package com.proxy;文档编号:xxxx6/* 测试代理* author xmong*/public class Test /* 测试静态代理方

11、法* 输出结果* static proxy do something.* test proxy do something.*/public void testStaticProxy()TestStaticProxy sp = new TestStaticProxy();sp.doSomething();/* 测试动态代理方法* 输出结果* dynamic proxy do something.* test proxy do something.*/public void testDynamicProxy()TestDynamicProxyHandler dp = new TestDynamicProxyHandler();TestProxy tp = (TestProxy)dp.createProxy(new TestProxyImpl();tp.doSomething();/* main 方法* param args*/public static void main(String args) Test t = new Test();/t.testStaticProxy();t.testDynamicProxy();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报