设计模式总汇.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实现中需要注意的问题: 最大化Component接口 声明管理子部件的操作(安全性与透明性) 存储组件的数据结构(链表,树,Hash) 课堂练习 在绘图编辑器中,用户可以组合多个简单的组件如: Line、Rectangle和Text来形成一些较大的组件,这些组件又可以组合成更大的组件。假设组件都需要实现Draw()来绘制他们代表的图形,组合组件需要实现与子组件相关的Add()和Delete()。请给出使用组合模式的代码。 END 6.6.3 代理模式的结构和参与者 对象(Subject) 定义ConcreteSubject和Proxy的共用接口,这样就在任何使用ConcreteSubject的地方都可以使用Proxy。 具体对象(ConcreteSubject) 定义Proxy所代表的实体 6.6.4 应用举例 生活中的例子 代理模式提供一个中介以控制对这个对象的访问。一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。 6.6.4 应用举例 在软件系统中,我们无时不在跨越障碍,当我们访问网络上一台计算机的资源时,我们正在跨越网络障碍,当我们去访问服务器上数据库时,我们又在跨越数据库访问障碍,同时还有网络障碍。跨越这些障碍有时候是非常复杂的,如果我们更多的去关注处理这些障碍问题,可能就会忽视了本来应该关注的业务逻辑问题,Proxy模式有助于我们去解决这些问题。我们以一个简单的数学计算程序为例,这个程序只负责进行简单的加减乘除运算: 6.6.4 应用举例 public?class?Math { ????public?double?Add(double?x,double?y) ????{ ????????return?x?+?y; ????} ????public?double?Sub(double?x,double?y) ????{ ????????return?x?-?y; ????} ????public?double?Mul(double?x,double?y) ????{ ????????return?x?*?y; ????} ????public?double?Dev(double?x,double?y) ????{ ????????return?x?/?y; ????} } 6.6.4 应用举例 如果说这个计算程序部署在我们本地计算机上,使用就非常之简单了,我们也就不用去考虑Proxy模式了。但现在问题是这个Math类并没有部署在我们本地,而是部署在一台服务器上,也就是说Math类根本和我们的客户程序不在同一个地址空间之内,我们现在要面对的是跨越Internet这样一个网络障碍: 6.6.4 应用举例 这时候调用Math类的方法就没有下面那么简单了,因为我们更多的还要去考虑网络的问题,对接收到的结果解包等一系列操作。 public?class?App { ????public?static?void?Main() ????{ ????????Math?math?=?new?Math(); ????????//?对接收到的结果数据进行解包 ????????double?addresult?=?math.Add(2,3); ????????double?subresult?=?math.Sub(2,3); ????????double?mulresult?=?math.Mul(2,3); ????????double?devresult?=?math.Dev(2,3); ????} } 6.6.4 应用举例 为了解决由于网络等障碍引起复杂性,就引出了Proxy模式,我们使用一个本地的代理来替Math类打点一切,即为我们的系统引入了一层间接层,示意图如下: 我们在MathProxy中对实现Math数据类的访问,让MathProxy来代替网络上的Math类,这样我们看到MathProxy就好像是本地Math类,它与客户程序处在了同一地址空间内 6.6.4 应用举例 public?class?MathProxy { ????private?Math?math?=?new?Math(); ????//?以下的方法中,可能不仅仅是简单的调用Math类的方法 ????public?double?Add(double?x,double?y) ????{ ????????return?math.Add(x,y); ????} ????public?double?Sub(

文档评论(0)

1112111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档