结构型模式代理_第1页
结构型模式代理_第2页
结构型模式代理_第3页
结构型模式代理_第4页
结构型模式代理_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计模式韩明2015年11月02日

5代理模式(Proxy)代理模式(Proxy)--概述Provideasurrogateorplaceholderforanotherobjecttocontrolaccesstoit.为其他对象提供一种代理以控制对这个对象的访问。为什么要使用Proxy?1.授权机制不同级别的用户对同一对象拥有不同的访问权利。2.某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动。举例两个具体情况:(1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片。(2)如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象。总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存。●抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。●目标对象角色:定义了代理对象所代表的目标对象。●代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。代理模式(Proxy)--角色代理模式(Proxy)--类图抽象对象角色publicabstractclassAbstractObject{//操作publicabstractvoidoperation();}目标对象角色publicclassRealObjectextendsAbstractObject{@Overridepublicvoidoperation(){//一些操作System.out.println("一些操作");}}代理模式(Proxy)--源码1代理对象角色publicclassProxyObjectextendsAbstractObject{RealObjectrealObject=newRealObject();@Overridepublicvoidoperation(){//调用目标对象之前可以做相关操作System.out.println("before");realObject.operation();//调用目标对象之后可以做相关操作System.out.println("after");}}代理模式(Proxy)--源码1客户端publicclassClient{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubAbstractObjectobj=newProxyObject();obj.operation();}}代理模式(Proxy)--源码1用户输入三个代表三角形三边长度的数值,代理对象验证用户输入的三个数值是否能构成三角形,如果能构成三角形,就创建一个三角形对象,并让三角形对象计算自身的面积。代理模式(Proxy)--实例1.抽象主题(Subject):Geometry.javapublicinterfaceGeometry{publicdoublegetArea();}

代理模式(Proxy)--源码22.具体模板(ConcreteTemplate):Trangle.javapublicclassTriangleimplementsGeometry{doublesideA,sideB,sideC,area;publicTriangle(doublea,doubleb,doublec){sideA=a;sideB=b;sideC=c;}publicdoublegetArea(){doublep=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));returnarea;}}

代理模式(Proxy)--源码23.代理(Proxy):TriangleProxy.javapublicclassTriangleProxyimplementsGeometry{doublesideA,sideB,sideC;Triangletriangle;publicvoidsetABC(doublea,doubleb,doublec){sideA=a;sideB=b;sideC=c;}publicdoublegetArea(){if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){triangle=newTriangle(sideA,sideB,sideC);doublearea=triangle.getArea();returnarea;}elsereturn-1;}}

代理模式(Proxy)--源码24.应用Application.java

importjava.util.Scanner;publicclassApplication{publicstaticvoidmain(Stringargs[]){Scannerreader=newScanner(System.in);System.out.println("请输入三个数,每输入一个数回车确认");doublea=-1,b=-1,c=-1;a=reader.nextDouble();b=reader.nextDouble();c=reader.nextDouble();TriangleProxyproxy=newTriangleProxy();proxy.setABC(a,b,c);doublearea=proxy.getArea();System.out.println("面积是:"+area);}}

代理模式(Proxy)--源码2代理模式可以屏蔽用户真正请求的对象,使用户程序和真正的对象之间解耦。使用代理来担当那些创建耗时的对象的替身。代理模式(Proxy)--总结代理模式(Proxy)--最佳实践代理模式给某一个对象提供一个代理对象,并由代理对象控制对源象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。设计原则:(1)延迟加载,提高系统效率。(2)单一职责原则。代理模式在安全性控制,线程同步控制,缓存执行结果,代理创建一些开销很大的对象(例如,Hibernate使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论