论代理模式在面向对象编程中的运用.pdf

上传人:qwe****56 文档编号:69625872 上传时间:2023-01-07 格式:PDF 页数:5 大小:264.67KB
返回 下载 相关 举报
论代理模式在面向对象编程中的运用.pdf_第1页
第1页 / 共5页
论代理模式在面向对象编程中的运用.pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《论代理模式在面向对象编程中的运用.pdf》由会员分享,可在线阅读,更多相关《论代理模式在面向对象编程中的运用.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2 0 0 8年 6月 第 2 期 连云港师范高等专科学校学报 J o u rna l o f L i a n y u n g a n g T e a c h e r s C o l l e g e J u n e,2 0 0 8 No 2 论代理模式在面 向对象编程中的运用 P 业 天 三 (连云港师范高等专科学校 计算机系,江苏 连云港 2 2 2 O O 6)摘要 代理设计模式在面向对象编程中有广泛应用,能使面向对象编程灵活性和复用性增强 文章描述 了代 理设计模式的基本要素及其所包含的类和实例的职责分配,阐述它在面向对象编程中的典型实现 关键词设计模式;代理;P r o x y;虚代理

2、;面向对象编程 中图分类号 T P 3 1 7 4 文献标识码 A 文章编号1 0 0 9 7 7 4 0(2 0 0 8)0 2 0 0 9 5 一 o 5 O引言 面向对象软件设计者知道:不是解决任何 问题 都要从头做起,可以复用以前使用过的好的解决方 案 目前,许多面向对象的程序开发环境 中存在类和 相互通信对象(c o m m uni c a t i n g o b j e c t)的重复模 式,这 些模式解决特定 的设计 问题,使 面向对象设计更灵 活、优雅,最终程序的复用性也更好 它们能帮助设 计者将新的设计建立在以往工作的基础上,复用 以 往成功的设计方案 代理模式是一种重要的模

3、式,它的复用形式较 多,应用场合覆盖从小结构到整个系统的大结构 众 多面 向对象编程语言(V C、J A V A、C撑等)都可以使用 代理行为,例如,C 撑中 A D O N E T的数据库连接实 际上全部是一种代理 代理的英文名称为 P r o x y,可 以解释为:在 出发点到 目的地之间有一道 中间层 1 代理 模式 在设 计模 式 中的地 位 设计模式可以这样解释:“每一个模式描述了一 个在我们周围不断重复发生 的问题,以及该问题 的 解决方案的核心 这样,你就能一次又一次地使用该 方案而不必 做重复劳动 ”设计模式确定 了所包 含的类和实例及模式的角色、协作方式和职责分配;每一个设计

4、模式都集 中于一个特定 的面向对象设计 问题或设计要点,描述了什么时候使用它,在另一些 设计约束条件下是否还能使用 以及使用 的效果 和如 何取舍 根据模式完成的不同工作,模式可分为创建型、结构型、行为型三种 创建型模式与对象的创建有 关 结构型模式处理类或对象的组合,行为型模式对 类或对象怎样交互及怎样分配职责进行描述 根据 模式是用于类还是用 于对象,模式可分为类模式 和 对象模式 类模式处理类 和子类之间的关系,这些关 系通过继承建立,是静态的,在编译时刻便确定下来 了 对象模式处理对象间的关 系,这些关系在运行时 刻是可以变化的,更具动态性 代理模式属于结构型 的对象模式,它描述了如何

5、对一些对象进行组合,从 而实现新功能的一些方法 2 代理模式的基本要素 在软件中大量反复使用模式,不但不会 阻碍软 件的发展,反而会推动软件的发展,因为其他设计这 类软件的人可以将更多精力集中在对付那些无法采 用模式的应用上来 2 1 代 理模 式的意 图 代理模式 的意 图是为其他对象提供一种代理以 控制对这个对象的访问 例如,一张支票或者银行汇 票(C h e c k P r o x y)是对于一个帐户上资金(F u n d P a i d F m m A c c o unt)的代理。支票能代替现金购买,最终能 够控制访问开证人帐户上的现金 2 2 代理 模 式可 解决 的 实际 问题 在

6、面向对象编程过程中,有时会使用资源开销 很大的对象,为了减少资源的开销,可以将该对象的 初始化推迟到客户真正需要时 例如,复杂和耗时的 类实例可能一直驻 留在数据库 中,为 了在程序中使 用实例,构造函数必须从数据库的数据中加载它们 相似的,复杂和耗时的对象可能只存在服务器上,使 收稿日期 2 O O 7 一 I 1 2 8 项目基金 江苏省现代教育技术研究“十一五”规划重点课题(项 目 编号:2 0 0 6 一 R一 2 3 9 6)。作者简介 吴兰(1 9 7 8 一),女,江苏连云港人,连云港师范高等专科学校计算机 系 讲师,主要从事应用软件研究。维普资讯 http:/ 用该对象前,客户

7、机必须请求服务器发送它,然后客 户机等待该对象 的到达 这些情况可使用代理模式(P r o x y P a t t e rn),如果创建一个对象 比较浪费时间或 浪费计算机资源,代理模式允许将创建过程推迟到 需要该实际对象的时候 代理对象通常具有和它所代表的对象一样的方 法,一旦对象被调入,就把调用方法从代理对象传递 给实际对象 下列几种情况适合于使用代理:(1)调入一个对象需要花费很长的时间,如调入 一个大图像 对应可采用“创建开销昂贵”对象 的占 位符,实际对象在用户第一次请求 存取时才被创 建,这种根据需要创建开销很大的对象的方法称为 代理模式中的虚代理(V i r t u a l P

8、r o xy)(2)计算结果需要花费很长时间才能完成,计算 过程 中需要 显示 中间结 果 代 理模式 的智 能指引(S m a r t R e f e r e n c e)通过取代简单 的指针,在访问对象 时执行一些额外操作 具体可以对指向实际对象的 引用计数,当该对象 没有 引用 时,可 以 自动释放它(也称为智能指针);当第一次引用一个持久对象时,将它装入内存;在访问一个实际对象前,检查是否已 经锁定了它,以确保其他对象不能改变它 (3)对象位于远程机器上,通过 网络调 入会 很 慢,特别是在网络负担高峰期间 代理模式中的远程 代理(R e m o t e P r o x y)采用为一个

9、对象在不同的地址 空间提供局部代表,这也是 R P C和 C O R B A中“s t u b”代码所提供的方法 (4)对象限制了访问权限,代理可以使访 问许可 对用户生效 代理模式的保护代理(P r o t e c t i o n P r o x y)能控制对敏感原始对象的访 问,用于对象有不同访 问权限的时候 总之,代理模式(P r o xy)可以区别是请求一个对 象实例,还是真正需要访问该实例 例如,程序初始 化时建立了许多对象,但不是所有 的对象马上就被 使用,这种情况下,代理能在需要时再调入真正的对 象 2 3 代 理模 式 可达 到的优 化 代理模式在访问对象时引入了一定程度的间接

10、 性 根据代理的类型,附加的间接性有多种用途:远 程代理(R e m o t e P r o xy)可以隐藏一个对象存在于不 同地址空间的事实;虚代理(V ir t u al P r o x y)可以根据 要求对创建的对象进行最优化;保护代理(P r o t e c t io n P r o x y)和智能指引(S m a r t R e fe re n c e)都允许在访问一 个对象时有一些附加的内务处理 9 6 代理模式还可以实现 c o p y o n w r i t e 的优化方 式,该优化与根据需要创建的对象有关 拷贝一个庞 大而复杂的对象是一种开销很大的操作,如果这个 拷贝根本没有

11、被修改,那么这些开销就没有必要 用 代理延迟这一拷贝过程,可以保证只有当这个对象 被修改的时候才对它进行拷 贝 V C+中 C S t r i n g 类 的拷贝构造 函数的实现就采用了这个优化方式 3 在面 向对象编程中具体应用的实现 3 1 代 理模 式 中涉及 实现 的三种 类型(1)代理类:一般用 P r O X Y标识 该类的实现 中保存一个引用使得代理可以访 问实体 提供一个 与实体接 口相同的代理接 口,这样代理就可以用来 替代实体来控制对实体的存取,并可能负责创建和 删除实体 远程代理(R e mot e P r o xy)负责对请求及其 参数进行编码,并向不 同地址空间 中的

12、实体发送 已 编码的请求 虚代理(V i r t u al P r o xy)可 以缓存实体的 附加信息,以便延迟对它 的访问,例如,可 以在代理 类 中缓 存 图像 实 体 的 尺 寸 保 护 代 理(P r o t e c t i o n P r o xy)N检查调用者是否具有实现一个请求所必需 的访问权限 (2)公共接 口类:一般用 S u b j e c t 标识 定义实体 类和代理类的共用接 口,这样就在任何使用实体类 的地方都可以使用代理类(3)实体类:一般用 R e a l S ubj e c t 标识 定义代理 类所代表的实体 包含实体具体实现代码 三个类之间的协作关系见图 1

13、 3 2重载 C+的指针 运 算符一 实现 智能代 理 重载 C+中的存取运算符一可 以在撤消对 一个对象的引用时,执行一些附加的操作,从而实现 某些要求的代理 下面展示使用这种技术实现一个称为 I m a g e P t r 的虚代理 c l a s s I ma g e;e x t e m I m a g e*L o a d A n I m a g e F i l e(c o n s t c h a r*);按指定的文件导入一个图像文件 c l ass I m a g e P t r p ub l i c:I m a g e P t r(c o n s t c h a r*i m a g

14、e F i l e);v i r t u alI m a g e P t r();vi r t u al I m a g e*o p e r a t o r一();重载运算符一 vi rt u al I m a g e&o p e r a t o r*();p r i v a t e:维普资讯 http:/ h n 8 g e*I J D a d ();p r i v a t e:I n 1 a 窘 e*一 i ma g e;图 1 三个类之间的协作关 系 一个指向图像类(im a g e)的指针 c o n s t c h a r*一 i ma g e F i l e;通过文件名引用图像类实

15、体 ;I m a g e*I m a g e P tr:o p e r a to r一()if(一 im a g e=0)在第一次引用一个持久对象时,将它装入内 存;一i ma g e=L o a d A n h n a g e F i l e(一 i ma g e F i l e);i t u r n i ma g e;否则直接返回指向图像类(I m a g e)的指针 Im a g e P tr:I m a g e P tr(c o n s t c h a r*t h e l m a g e F il e),f 弋 理类的构造函数 一i ma g e F i l e=t h e l m a

16、 g e F i l e;一i ma g e=O:下面代码是客户的使用代码的关键部分:I ma g e P t r p i c=P t r(“d o g j p g”);为图像 d o g J o g 建立代理 p i c P i c-D r a w(P o i n t(5 0,1 0 0);,相当于(p i c o p e ra to r-()-D r a w(P o in t(5 0,1 0 0);对上述代码的关键部分进行说明:(1)p i e 是图像代理类(I r Ila g e P t r)的对象,通过该 类的构造函数,使 p i c 的 im a g e F il e 数据成员保存图

17、 像文件“d o g j p g”的文件名。并使 p ic的 im a g e 数据 成员值为空 (2)p ic 调用运算符一重载函数得到指向“d o g j p g”文件的指针,D r a w是图像类(I m a g e)的成员函数 名 因为对象指针调用函数时是这样的:对象指针名 一成员函数名(参数);对应的语句是:(p i c o per a t o r 一()D r a w(P o i n t(5 0,l o o);(3)该方法能够通过图像代理类(I m a g e P tr)对象 调用图像类(I m a g e)的相关操作,省去了把这些操作 作为图像代理类(Im a g e P t r

18、)接 口一部分的麻烦 但是 有些代理类需要清楚地知道调用了哪个操作,重载 运算符的方法在这种情况下行不通 在这种情况下 需要人工实现每一个代理操作,向实体转发请求 3 3 使 用公用接 口实现虚代理 实现一个可以在文档中嵌入图形对象的文档编 辑器,要求打开文档时应避免一次性创建所有开销 很大的对象,并且这种优化不能影响绘制和格式化 代码 问题的解决方案是使用另一个对象(图像代理)替代那个真正的图像 只有当文档编辑器激活图像 代理的D r a w操作以显示这个图像的时候,图像代理 才创建真正的图像 我们假设图像存储在一个独立 的文件中 这样我们可以把文件名作为对实际对象 的引用 图像代理还存储了

19、图像的尺寸(e x t e n t),即 它的长和宽,有了图像尺寸,图像代理无须真正实 例化这个图像就可以响应格式化程序对图像尺寸的 请求(图2 是实 现的类结构图)图 2 类结构 图 出现图(G r a p h i c 类)的原因一:图像代理类(Ir a a g e P r o x y)需要提供一个与图像实体类(a g e)接口相 同的接口,这样代理就可以用来替代实体 根据设计 模式构造原则中的依赖倒转原则(应当依赖于抽象,不要依赖于具体),传统过程化的系统设计倾向于使 高层次的模块依赖于低层次的模块,抽象层次依赖 于具体层次,倒转就是要把这个错误的关系纠正过 来 原因二:根据设计模式构造原

20、则中的里氏代换原 9 7 维普资讯 http:/ 则:“一个软件实体如果使用地是一个基类,那么它 一定适用其子类”I2 1 可以用指向基类的指针或引 用访问其派生类对象从基类中继承的成分,反之则 不行,这样在任何使用 图像实体类(如 I m a g e 类)的 地方都可以使用图像代理类(如 Imag e P r o x y)相关 代码如下 c l a s s G r a p h i c p u b l i c:v i r t u a l G r a p h i c();没有代码 的纯虚函数 v i r t u al v o i d l o a d(i s t r e a m&f r o m)=

21、0;v i r t u al v o i d S a v e(o s t r e a m&t o)=0;p r o t e c t e d:G r a p h i c();c l a s s Image:p ubl i c G r a p h i c 功能具体实现代码(略)v i rt u al v o i d L o a d(i s t r e a mf r o m);v i rt u a l v o i d Sav e(o s t r e a mt o);p r i v a t e:;c l ass Image P r o x y:p ubl i c G r a p h i c 客户直接使

22、用的代码 v i rt u al v o i d L o a d(i s t r e a mf r o m);v i rt u a l v o i d S a v e(o s t r e a mt o):p r o t e c t e d:I 兰:J 98 图 3(a)没使 用 代 理,开销 大 图 3(b)使 用 代理,开 销 减 少 图 3 重载操作符实现的代理 指向实体 Image的指针 P o i n t e x t e n t;c h a r*一 fil e n a me;I ma g e P r o x y:Image P r o xy(c o n s t c h ar*fi l

23、e n a m e)代理类的构造函数,并未画出图像 一fi l e n a m e=一 s t r d u m p(fi l e n a me);延迟了图像的绘制 一e x t e n t:Po i n t:Z e r o;。i m a g e=0;指针初始化为空 I ma g e*I mage P r o x y:G e t I ma g e()使指针型成员变量一 i m a g e 指向指定文件名的 图像 i f(i m a g e=0)一i m a g e=n e w Image(一 fi l e n a m e);r e t u r n i ma g e;维普资讯 http:/ v o

24、 i d I ma g e P r o x y:D r a w(e o n s t P o i n t&a t)通过调用实体 I m a g e 的 D r a w函数真正绘制图|像 C,e t l n e()一D r a w(a t);请求到达时,实际对象被创建 下面代码是客户的使用代码的关键部分 T e x t Do e mn e n t*t e x t:n e w Te x t Do c u me n t;这是一个文档类,相 当于客户 G r a p h i c p;P=n e w l m a g e P r o x y(”d o g b m p”);t e x t I n s e r

25、t(p);文档类成员函数 I n s e r t 的函数原型是:v o i d I n s e r t(G r a p h i c*)客户没有使用代理对应的代码格式为:公共接口 类 P=n e w实体类;请求();。客户使用代理后的格式为:公共接口 类 P=n e w代理类;请求();3 4 实例 实现的最终效果(1)重载操作符实现的代理,如图3 (2)使用公共接口实现代理的效果图,如图4 图 4 使用公共接 口实现 代理 的效 果图 4 小结 代理模式是通用的设计模式之一,该模式在不 改变被代理类接 口的条件下,为另一个对象定义了 一个代理 代理模式应用范围很广,现在流行的分布 计算方式 R

26、 M I 和 C o r b a 等都是采用了代理模式 理 解和掌握代理模式,可以帮助设计者更快更好地完 成系统设计;理解并使用代理模式,还能够培养良好 的面向对象编程习惯,从而使程序设计者在实际编 程设计中享受面向对象编程的乐趣【参考文献】。1 C h r i s t o p h e r A l e x a n d e r AP a t t e rnI 锄g I la M N e wY o r k:O x-f o r d U n i v e r s i t y P r e s s 1 9 7 7 2 阎宏 j a v a 与模式 M 北京:电子工业出版社,2 0 0 2 An a l y s

27、 i s o f t h e Ap p l i c a t i o n s o f Pr o x y Pa t t e r n i n Op p WU La n (D e p a r t m e n t o f C o m p u t e r S c i e n c e,L i a n y u n g a n g T e a c h e r s C o l l e g e,L i a n y m a g a n g 2 2 2 0 0 6,C h i n a)A b s t r a c t:T h e p o r x y d e s i g n p a t t e rn h a s e x t

28、 e n s i v e a p p l i c a ti o n s i n o b j e c t o r i e n t e d p r o g r a m m i n g I t 0 a n i n a k e o b j e c t o ri e n t e d p r D n g mo r e v i v i d a n d e n h a n c e t h e r e mmg a b i l i t y T h e t h e s i s d e s c r i b e s t h e p r o x y d e s i g n p a tt e rn s e s s e n

29、ti a l de me a t a n d t h e f u n c t i o n s ass i g n e d i n i t T h e t h e s i s a l s o d i s c u s s e s p r o x y d e s i g n p a t t e r n s t y p i c a l r e a l i z a ti o n s K e y w o r d s:d e s i g n p a t t e rn;p r o x y;v i s u a l p r o x y;o b j e c t o ri e n t e d p r o g r a m m i n g 维普资讯 http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 财经金融

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁