设计模式结构型模式(二).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式结构型模式(二).doc

第5章 结构型模式(二) 5.1 代理模式(Proxy) Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如图5-1所示。 图5-1 代理原理 比如说C和A不在一个服务器上,A要频繁的调用C,我们可以在A上做一个代理类Proxy,把访问C的工作交给Proxy,这样对于A来说,就好像在直接访问C的对象。在对A的开发中我们可以把注意力完全放在业务的实现上。 5.1.1 概念 1、名称 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或Surrogate,中文都可译成代理。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 下面我们通过“高老庄悟空降八戒 【高老庄的故事 却说那春融时节,悟空牵着白马,与唐僧赶路西行。忽一日天色将晚,远远地望见一村人,这就是高老庄,猪八戒的丈人高太公家。为了将高家三小姐解救出八戒的魔掌,悟空决定扮做高小姐,会一会这个妖怪: “行者却弄神通,摇身一变,变得就如那女子一般,独自个坐在房里等那妖精。不多时,一阵风来,真个是走石飞砂……那阵狂风过处,只见半空里来了一个妖精,果然生得丑陋:黑脸短毛,长喙大耳,穿一领青不青、蓝不蓝的梭布直裰,系一条花布手巾……走进房,一把搂住,就要亲嘴……” 高家三小姐的神貌和本人 悟空的下手之处是将高家三小姐的神貌和她本人分割开来,这和开一闭原则有异曲同工之妙。这样一来,高家三小姐本人也就变成了高家三小姐神貌的具体实现,而高家三小姐神貌则变成了抽象角色,如下图所示。 【悟空扮演并代替高家三小姐 悟空巧妙地实现了高家三小姐神貌,也就是说同样变成了高家三小姐神貌的子类。悟空可以扮演高家三小姐,并代替高家三小姐会见八戒,其静态结构图如图所示。 悟空代替高家三小姐本人去会见猪八戒。显然这就是代理模式的应用。具体地讲,这是保护代理模式的应用。只有代理对象认为合适时,才会将客户端的请求传递给真实主题对象。 八戒分辨不出真假老婆 从《西游记》的描述可以看出,猪八戒根本份辨不出悟空扮演的高家三小姐替身和高家三小姐本人。客户端分辨不出代理主题对象与真实主题对象,这是代理模式的一个重要用意。 悟空代替高家三小姐会见八戒的对象图如图所示。 3、意图 为其他对象提供一种代理以控制这个对象的访问。 4、角色 抽象主题角色声明了代理主题和真实主题的公共接口使任何需要真实主题的地方都能用代理主题代替 代理主题角色含有真实主题的引用从而可以在任何时候操作真实主题代理主题功过提供和真实主题相同的接口使它可以随时代替真实主题代理主题通过持有真实主题的引用不但可以控制真实主题的创建或删除可以在真实主题被调用前进行拦截或在调用后进行某些操作 真实代理对象定义了代理角色所代表的具体对象 5.1.3 适用范围 代理的实质为其他对象提供一种代理以控制对这个对象的访问 如果那个对象是一个是很大的图片需要花费很长时间才能显示出来那么当这个图片包含在文档中时使用编辑器或浏览器打开这个文档打开文档必须很迅速不能等待大图片处理完成这时需要做个图片Proxy来代替真正的图片 如果那个对象在Internet的某个远端服务器上直接操作这个对象因为网络速度原因可能比较慢那我们可以先用Proxy来代替那个对象 某个客户端不能直接操作到某个对象但又必须和那个对象有所互动比如一个对象不具有网络访问功能但有时必须访问网络中的其它对象。 在生活中,一个红酒厂商是不会直接把红酒零售客户的都是通过代理来完成他的销售业务的而客户也不用为了喝红酒而到处找工厂他只要找到厂商在当地的代理就行了具体红酒工厂在那里客户不用关心代理会帮他处理 红酒代理商和红酒厂商都有销售红酒的只能我们可以为他们定义一个共同的抽象主题角色 图5-5 结构图 1、静态代理 抽象主题接口ISell代码如下: package com.sanlian.mode.proxy; /** * 代理主题接口、红酒销售接口 * @author sanlian * @version Nov 26, 2010 3:44:26 PM */ public interface ISell { /** * 红酒销售方法 * @return */ Object sell(); } package com.sanlia

文档评论(0)

只做精品 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档