详解设计模式中的proxy代理模式及在java程序中的实现

详解设计模式中的proxy代理模式及在java程序中的实现

ID:30861465

大小:199.50 KB

页数:15页

时间:2019-01-04

详解设计模式中的proxy代理模式及在java程序中的实现_第1页
详解设计模式中的proxy代理模式及在java程序中的实现_第2页
详解设计模式中的proxy代理模式及在java程序中的实现_第3页
详解设计模式中的proxy代理模式及在java程序中的实现_第4页
详解设计模式中的proxy代理模式及在java程序中的实现_第5页
资源描述:

《详解设计模式中的proxy代理模式及在java程序中的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、详解设计模式中的proxy代理模式及在Java程序中的实现代理模式主要分为静态代理和动态代理,使客户端方面的使川者通过设置的代理來操作对彖,下面来详解设计模式屮的proxy代理模式及在Java程序屮的实现一、代理模式定义给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。著名的代理模式的例了就是引丿LT计数(referencecounting):当需要一个复杂对彖的多份副本时,代理模式可以结合享元模式以减少存储器的用量。典型做法是创建一个复杂对彖以及多个代理者,每个代理

2、者会引用到原本的对喙。而作用在代理者的运算会转送到原木对象。一口所有的代理者都不存在时,复杂对象会被移除。要理解代理模式很简单,其实生活当中就存在代理模式:我们购买火车票町以去火车站买,但是也町以去火车票代售处买,此处的火车票代售处就是火不站购票的代理,即我们在代售点发出买票谙求,代售点会把请求发给火不站,火车站把购买成功响应发给代售点,代售点再告诉你。但是代售点只能买票,不能退票,而火车站能买票也能退票,因此代理对象支持的操作可能和委托对象的操作有所不同。再举一个写程序会碰到的一个例了:如果现在有一个已有项冃(你没有源代码,只能调用它

3、)能够调用intcompute(Stringexpl)实现对于后缀表达式的计算,你想使用这个项目实现对于中缀表达式的计算,那么你可以写一个代理类,并且其中也定义一个compute(Stringexp2),这个exp2参数是中缀表达式,因此你需要在调用已有项目的computed之前将中缀表达式转换成后缀表达式(Preprocess),再调用已冇项冃的computed,当然你还可以接收到返回值Z后再做些其他操作比如存入文件(Postprocess),这个过程就是使用了代理模式。在平时用电脑也会碰到代理模式的应用:远程代理:我们在国内因为GF

4、W,所以不能访问facebook,我们可以用翻墙(设置代理)的方法访问。访问过程是:⑴用户把HTTP请求发给代理⑵代理把HTTP请求发给web服务器(3)web服务器把HTTP响应发给代理⑷代理把HTTP响应发回给用户二、静态代理所谓静态代理,就是在编译阶段就生成代理类来完成对代理对彖的一系列操作。下面是代理模式的结构类图:1、代理模式的参与者代理模式的角色分四种:主题接口:即代理类的所实现的行为接口。冃标对彖:也就是被代理的对彖。代理对象:用來封装真是主题类的代理类客户端下面是代理模式的类图结构:[realSubject.Reque

5、st()2、代理模式的实现思路代理对象和目标对象均实现同一个行为接口o代理类和目标类分别具体实现接口逻辑。在代理类的构造函数中实例化一个冃标对象。在代理类中调用冃标对彖的行为接口。客户端想耍调用目标对象的行为接口,只能通过代理类來操作。3、静态代理的实例下面以一个延迟加载的例子来说明一下静态代理。我们在启动某个服务系统时,加载某一个类时可能会耗费很长时间。为了获取更好的性能,在启动系统的时候,我们往往不去初始化这个复杂的类,取而代之的是去初始化其代理类。这样将耗费资源多的方法使用代理进行分离,可以加快系统的启动速度,减少用户等待的时间。

6、定义一个主题接口publicinterfaceSubject{publicvoidsayHello();publicvoidsayGoodBye();}定义一个目标类,并实现主题接口publicclassRealSubjectimplementsSubject{publicvoidsayHellof){System.out.printlnf'HelloWorld");}publicvoidsayGoodBye(){System.out.println("GoodByeWorld");}}定义一个代理类,來代理目标对象。publiccla

7、ssStaticProxyimplementsSubject{PrivateRealSubjectrealSubject=null;publicStaticProxyf){}publicvoidsayHello(){〃用到时候才加载,懒加载if(realSubject==null){realSubject=newRealSubject();}realSubject.sayHellof);}//sayGoodbye方法同理•••}定义一个客户端publicclassClient{publicstaticvoidmain(String[]a

8、rgs){StaticProxysp=newStaticProxy();sp.sayHello();sp.sayGoodBye();}}以上就是静态代理的一个简单测试例子。感觉可能没有实际用途。然而并非如此

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。