论代理模式在面向对象编程中的运用.pdf
《论代理模式在面向对象编程中的运用.pdf》由会员分享,可在线阅读,更多相关《论代理模式在面向对象编程中的运用.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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;通过文件名引用图像类实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 代理 模式 面向 对象 编程 中的 运用
限制150内