《设计模式.代理模式(Proxy).pptx》由会员分享,可在线阅读,更多相关《设计模式.代理模式(Proxy).pptx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LOGO设计模式设计模式(Design Pattern)张凯 副教授计算机学院 软件工程系武汉科技大学问题问题(Problem)(Problem)v我们毕业啦!托运了轻装启程!武汉科技大学问题问题(Problem)(Problem)v我们毕业啦!托运了轻装启程!武汉科技大学问题问题(Problem)(Problem)/快递工作人员classExpressPersonprivatestringname;publicstringNamegetreturnname;setname=value;武汉科技大学问题问题(Problem)(Problem)/毕业生classGraduateExpressPe
2、rsonYDY;publicGraduate(ExpressPersonYDY)this.YDY=YDY;publicvoidGiveComputer()Console.WriteLine(YDY.Name+请你托运计算机);publicvoidGiveBaggage()Console.WriteLine(YDY.Name+请你托运行李);武汉科技大学问题问题(Problem)(Problem)staticvoidMain(stringargs)ExpressPersonYDY=newExpressPerson();YDY.Name=宅急送;Graduatezhangsan=newGradua
3、te(YDY);zhangsan.GiveComputer();zhangsan.GiveBaggage();Console.Read();武汉科技大学问题问题(Problem)(Problem)/女同学classClassmateExpressPersonYDY;publicClassmate(ExpressPersonYDY)this.YDY=YDY;publicvoidGiveComputer()Console.WriteLine(YDY.Name+请你托运计算机);publicvoidGiveBaggage()Console.WriteLine(YDY.Name+请你托运行李);武汉科
4、技大学问题问题(Problem)(Problem)staticvoidMain(stringargs)ExpressPersonYDY=newExpressPerson();YDY.Name=宅急送;ClassmateGirl=newClassmate(YDY);Girl.GiveComputer();Girl.GiveBaggage();Console.Read();武汉科技大学问题问题(Problem)(Problem)/快递工作人员classExpressPersonprivatestringname;publicstringNamegetreturnname;setname=value
5、;武汉科技大学问题问题(Problem)(Problem)/寄东西interfaceGiveObjectvoidGiveComputer();voidGiveBaggage();武汉科技大学问题问题(Problem)(Problem)/毕业生classGraduate:GiveObjectExpressPersonYDY;publicGraduate(ExpressPersonYDY)this.YDY=YDY;publicvoidGiveComputer()Console.WriteLine(YDY.Name+请你托运计算机);publicvoidGiveBaggage()Console.Wr
6、iteLine(YDY.Name+请你托运行李);武汉科技大学问题问题(Problem)(Problem)/女同学:GiveGiftclassClassmate:GiveObjectGraduatezhangsan;publicClassmate(ExpressPersonYDY)zhangsan=newGraduate(YDY);publicvoidGiveComputer()zhangsan.GiveComputer();publicvoidGiveBaggage()zhangsan.GiveBaggage();武汉科技大学问题问题(Problem)(Problem)staticvoidM
7、ain(stringargs)ExpressPersonYDY=newExpressPerson();YDY.Name=宅急送;ClassmateGirl=newClassmate(YDY);Girl.GiveComputer();Girl.GiveBaggage();Console.Read();武汉科技大学主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3模式效果与应用4武汉科技大学代理模式代理模式(Proxy)(Proxy)v模式动机模式名称:代理模式(Proxy)一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,去掉客户不能看到的
8、内容和服务或者增添客户需要的额外服务。如在网页上查看一张图片,由于网速等原因图片不能立即显示,我们可以在图片传输过程中先把一些简单的用于描述图片的文字传输到客户端,此时这些文字就成为了图片的代理。武汉科技大学代理模式代理模式(Proxy)(Proxy)v模式定义代理模式(ProxyPattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate。代理模式是一种对象结构型模式。武汉科技大学代理模式代理模式(Proxy)(Proxy)v模式结构武汉科技大学代理模式代理模式(Proxy)(Proxy)v参与者Subject:抽象主题角色Pr
9、oxy:代理主题角色RealSubject:真实主题角色武汉科技大学代理模式代理模式(Proxy)(Proxy)v参与者抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题真实主题(RealSubject)角色:定义了代理角色所代表的真实对象武汉科技大学代理模式代理模式(Proxy)(Proxy)v参与者代理主题(Proxy)角色:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题;控制真实主题的应用,负责在需要的时候创建真
10、实主题对象(和删除真实主题对象)武汉科技大学代理模式代理模式(Proxy)(Proxy)v在软件系统中,我们无时不在跨越障碍,当我们访问网络上一台计算机的资源时,我们正在跨越网络障碍,当我们去访问服务器上数据库时,我们又在跨越数据库访问障碍,同时还有网络障碍。跨越这些障碍有时候是非常复杂的,如果我们更多的去关注处理这些障碍问题,可能就会忽视了本来应该关注的业务逻辑问题,Proxy模式有助于我们去解决这些问题。武汉科技大学代理模式代理模式(Proxy)(Proxy)v我们以一个简单的数学计算程序为例,这个程序只负责进行简单的加减乘除运算:publicclassMathpublicdoubleAd
11、d(doublex,doubley)returnx+y;publicdoubleSub(doublex,doubley)returnx-y;publicdoubleMul(doublex,doubley)returnx*y;publicdoubleDev(doublex,doubley)returnx/y;武汉科技大学代理模式代理模式(Proxy)(Proxy)v如果说这个计算程序部署在我们本地计算机上,使用就非常之简单了,我们也就不用去考虑Proxy模式了。但现在问题是这个Math类并没有部署在我们本地,而是部署在一台服务器上,也就是说Math类根本和我们的客户程序不在同一个地址空间之内,我
12、们现在要面对的是跨越Internet这样一个网络障碍:武汉科技大学代理模式代理模式(Proxy)(Proxy)v这时候调用Math类的方法就没有那么简单了,因为我们更多的还要去考虑网络的问题,对接收到的结果解包等一系列操作武汉科技大学代理模式代理模式(Proxy)(Proxy)v为了解决由于网络等障碍引起的复杂性,就引出了Proxy模式,我们使用一个本地的代理来替Math类打点一切,即为我们的系统引入了一层间接层武汉科技大学代理模式代理模式(Proxy)(Proxy)v我们在MathProxy中实现对Math数据类的访问,让MathProxy来代替网络上的Math类,这样我们看到MathPro
13、xy就好像是本地Math类,它与客户程序处在了同一地址空间内:武汉科技大学代理模式代理模式(Proxy)(Proxy)publicclassMathProxyprivateMathmath;publicMathProxy()math=newMath();/以下的方法中,可能不仅仅是简单的调用Math类的方法publicdoubleAdd(doublex,doubley)returnmath.Add(x,y);publicdoubleSub(doublex,doubley)returnmath.Sub(x,y);publicdoubleMul(doublex,doubley)returnmath
14、.Mul(x,y);publicdoubleDev(doublex,doubley)returnmath.Dev(x,y);武汉科技大学代理模式代理模式(Proxy)(Proxy)v现在可以说我们已经实现了对Math类的代理,存在的一个问题是我们在MathProxy类中调用了原实现类Math的方法,但是Math并不一定实现了所有的方法,为了强迫Math类实现所有的方法,另一方面,为了我们更加透明的去操作对象,我们在Math类和MathProxy类的基础上加上一层抽象,即它们都实现与IMath接口武汉科技大学代理模式代理模式(Proxy)(Proxy)publicinterfaceIMathdo
15、ubleAdd(doublex,doubley);doubleSub(doublex,doubley);doubleMul(doublex,doubley);doubleDev(doublex,doubley);/Math类和MathProxy类分别实现IMath接口:publicclassMathProxy:IMath。publicclassMath:IMath。武汉科技大学代理模式代理模式(Proxy)(Proxy)v此时我们在客户程序中就可以像使用Math类一样来使用MathProxy类publicstaticvoidMain()MathProxyproxy=newMathProxy()
16、;doubleaddresult=proxy.Add(2,3);doublesubresult=proxy.Sub(2,3);doublemulresult=proxy.Mul(2,3);doubledevresult=proxy.Dev(2,3);武汉科技大学代理模式代理模式(Proxy)(Proxy)v到这儿整个使用Proxy模式的过程就完成了,回顾前面我们的解决方案,无非是在客户程序和Math类之间加了一个间接层,这也是我们比较常见的解决问题的手段之一。v另外,对于程序中的接口Imath,并不是必须的,大多数情况下,我们为了保持对对象操作的透明性,并强制实现类实现代理类所要调用的所有的方
17、法,我们会让它们实现同一个接口。但是代理类它其实只是在一定程度上代表了原来的实现类,所以它们有时候也可以不实现于同一个接口。武汉科技大学代理模式代理模式(Proxy)(Proxy)v模式使用代理有以下几种:远程(Remote)代理虚拟(Virtual)代理保护(ProtectorAccess)代理缓冲(Cache)代理防火墙(Firewall)代理同步化(Synchronization)代理智能引用(SmartReference)代理武汉科技大学代理模式代理模式(Proxy)(Proxy)v远程代理(Remote)为一个位于不同的地址空间的对象提供一个局域代表对象。可以隐藏一个对象存在于不同地
18、址空间的事实。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。武汉科技大学代理模式代理模式(Proxy)(Proxy)v远程代理(Remote)可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。客户完全可以认为被代理的对象是局域的而不是远程的,而代理对象承担了大部分的网络通信工作,远程代理的结构图如下图所示。武汉科技大学代理模式代理模式(Proxy)(Proxy)v虚拟(Virtual)代理代理对象可以在必要的时候才将被代理的对象加载。代理可以对加载的过程加以必要的优化。当一个模块的加载十分耗费资源的时候,虚拟代理的优点就非常明显。武
19、汉科技大学代理模式代理模式(Proxy)(Proxy)v虚拟(Virtual)代理某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的内存资源.武汉科技大学代理模式代理模式(Proxy)(Proxy)武汉科技大学代理模式代理模式(Proxy)(Proxy)武汉科技大学代理模式代理模式(Pro
20、xy)(Proxy)v保护代理(ProtectorAccess)可以在运行时对用户的有关权限进行检查,然后在核实后决定将调用传递给被代理的对象。授权机制不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:注册用户和游客(未注册用户),Jive中就通过类似ForumProxy这样的代理来控制这两种用户对论坛的访问权限.武汉科技大学代理模式代理模式(Proxy)(Proxy)v智能引用代理(SmartReference)当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。AOP(AspectOrientedP
21、rogramming)武汉科技大学代理模式代理模式(Proxy)(Proxy)vCopy-on-Write代理:虚拟代理的一种。把复制(克隆)拖延到只有在客户端需要时,才真正采取行动。vCache代理:为那些昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。v防火墙(Firewall)代理:保护目标,不让恶意用户接近。v同步化(Synchronization)代理:使几个用户能够同时访问目标对象而没有冲突。武汉科技大学代理模式代理模式(Proxy)(Proxy)v代理模式的优点如下代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度。当对象在远程机器上,要通过网络来生成时速度可能会很慢,此时应用代理模式可以掩盖对象在网络上生成的过程,系统的速度会加快。对于大对象的加载(如大图片),虚拟代理可以让加载过程在后台执行,前台使用的代理对象会使得整体运行速度得到优化。武汉科技大学代理模式代理模式(Proxy)(Proxy)v代理模式的优缺点如下代理模式的缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作。武汉科技大学代理模式代理模式(Proxy)(Proxy)v模式应用图片代理AOP(AspectOrientedProgramming)LOGO
限制150内