第13讲Proxy 代理模式.doc_第1页
第13讲Proxy 代理模式.doc_第2页
第13讲Proxy 代理模式.doc_第3页
第13讲Proxy 代理模式.doc_第4页
第13讲Proxy 代理模式.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

第13讲:Proxy 代理模式2006.4.12 李建忠直接与间接人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。假设A要访问B三次。如果A和B是分布式中的两个机器,那么A需要跨机器调用B三次就不是很好。如果在A和B之间加一个代理对象C,并且A和C处于同一个地址空间,即同一个机器。那么A和C之间通讯是非常高效的,现在A和C之间调用三次,到某个触发点的时候,和B只需要一次的通讯,这样性能就会好很多。这样做还有一个好处,即A不需要再知道分布式通讯的内容了。现实生活中,其实操作系统就是软件和硬件之间的代理。动机(Motivation)在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。意图(Intent)为其他对象提供一种代理以控制对这个对象的访问。设计模式GoF例说Proxy应用HrSystem里面new的Employee对象将位于和HrSystem同样的地址空间里面,但如果我们需要把Employee作为跨互联网的调用,那么这样的代码就不适用了。改进后的代码:Employee的代理应该和Employee具有同样的接口,它的实现很复杂。其中,Employee类运行在Internet远端的一台机器上,而EmployeeProxy运行在本地的Windows Forms上。这里代理的目的是为了屏蔽分布式通讯、WebService的细节。结构(Structure)其中Subject就是HrSystem,它本来是要直接调用RealSubject的。但是由于WebSerivce这种情况,它需要间接的通过Proxy调用RealSubject。Proxy模式的几个要点“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会来带很多问题,作为间接层的Proxy对象便是解决这一问题的常用手段。具体Proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做Proxy。Proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。.NET架构中的Proxy应用WebService的一些例子:代理对象MathService客户端客户端使用的是MathService类,这个类是在本地运行的。另一个例子:Copy-on-Write左边是堆,这样做是比较浪费内存的,因为系统中可能有很多字符串重复。目前大多数系统都是以下的做法:但这样字符串就不能更改了,例如如果要把s1改为大写,那么必须要另起一个字符串变量:C#当然也是允许对字符串更改的,不过不是string类型,而是StringBuilder类型。这样sb就可以被改变。StringBuilder的原理:sb、sb2和sb3都指向同一个字符串,如果sb把里面内容改变,那么就会把hello拷贝到另一块内存,再把内容进行更改。其实Copy-on-Write应该更准确地描述为Copy-on-Change。StringBuilder其实就是一种代理,我们本意是想访问字符串的,StringBuilder就是一种可变字符串的代理,而且StringBuilder也没有和String保持接口的一致性。我们看看StringBuilder的源代码:注意Replace方法,当需要改变字符串的内容时,步骤是先n

温馨提示

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

评论

0/150

提交评论