第六章结构型设计模式资料.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章结构型设计模式资料.ppt

6.2.1 装饰模式的由来 6.2.1 装饰模式的由来 6.2.1 装饰模式的由来 6.2.1 装饰模式的由来 6.2.1 装饰模式的由来 6.2.1 装饰模式的由来 6.2.4 代码说明 6.3.1 桥接模式的由来 6.3.1 桥接模式的由来 6.3.1 桥接模式的由来 6.3.1 桥接模式的由来 6.3.1 桥接模式的由来 * 有障碍才能出现代理,比如生活中各种障碍(时间也是一种障碍),买火车票,审车 * 此例中没有subject * 1结果解包的概念来之于RMI或DCOM 注意:此处的math与App不在同一个地址空间 一般要有RMI支持(远程过程调用),即使在RMI的基础上,网络障碍也存在 * 即使加入了MathProxy,也需要RMI的支持 * 一条命令在多个对象上激发复杂的或递归的行为。 用同样的方法处理对象的集合和其中的特定子对象 对组合对象执行的这些操作将向下传递到所有的组成对象 把一批子对象组织成树形结构,并且使整棵树都可被遍历 · 用户需要控制整个组合对象 · 用户需要控制组合对象中的单个部分。 · 用户界面应当一致 * 组合模式看起来很像对象模型,但对象模型是静态的,组合模式是动态的 红色节点表示拥有分支的节点 灰蓝色节点表示叶子节点 任务:建立对象模型 问题:递归? * 此页是完成对上页的建模 大家学会了数据结构对树的形式化定义(建模) 在这里,大家要学会对树的UML建模 * 此为透明的组合模式,还有安全模式 * 递归? 何谓:部分-整体? 组合会越来越多 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(double?x,double?y) ????{ ????????return?math.Sub(x,y); ????} ????public?double?Mul(double?x,double?y) ????{ ????????return?math.Mul(x,y); ????} ????public?double?Dev(double?x,double?y) ????{ ????????return?math.Dev(x,y); ????} } 6.6.4 应用举例 现在可以说我们已经实现了对Math类的代理,存在的一个问题是我们在MathProxy类中调用了原实现类Math的方法,但是Math并不一定实现了所有的方法,为了强迫Math类实现所有的方法,另一方面,为了我们更加透明的去操作对象,我们在Math类和MathProxy类的基础上加上一层抽象,即它们都实现与IMath接口,示意图如下: 6.6.4 应用举例 public?interface?IMath { ????double?Add(double?x,double?y); ????double?Sub(double?x,double?y); ????double?Mul(double?x,double?y); ????double?Dev(double?x,double?y); } Math类和MathProxy类分别实现IMath接口: public?class?MathProxy?:?IMath { ????// ………… } public?class?Math?:?IMath { ????// ………… } 6.6.4 应用举例 此时我们在客户程序中就可以像使用Math类一样来使用MathProxy类了: public?class?App { ????public?static?void?Main() ????{ ????????MathProxy?proxy?=?new?MathP

文档评论(0)

我是兰花草 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档