面向对象方法与技术:设计模式实践课件.ppt

面向对象方法与技术:设计模式实践课件.ppt

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

共151页第*页Caretaker(负责人,如undomechanism)—负责保存好备忘录。—不能对备忘录的内容进行操作或检查。MEMENTO(备忘录)模式共151页第*页协作备忘录是被动的。管理器向原发器请求一个备忘录,保留一段时间后,将其送回给原发器,如下面的交互图所示:MEMENTO(备忘录)模式共151页第*页MEMENTO(备忘录)模式共151页第*页效果1)保持封装边界2)简化了原发器3)使用备忘录可能代价很高4)定义窄接口和宽接口5)维护备忘录的潜在代价MEMENTO(备忘录)模式共151页第*页实现下面是当实现备忘录模式时应考虑的两个问题:1)语言支持备忘录有两个接口:一个为原发器所使用的宽接口,一个为其他对象所使用的窄接口。理想的实现语言应可支持两级的静态保护。MEMENTO(备忘录)模式共151页第*页共151页第*页2)存储增量式改变如果备忘录的创建及其返回(给它们的原发器)的顺序是可预测的,备忘录可以仅存储原发器内部状态的增量改变。MEMENTO(备忘录)模式共151页第*页代码示例此处给出的C++代码展示的是前面讨论过的ConstraintSolver的例子。MoveCommand命令对象来执行(取消)一个图形对象从一个位置到另一个位置的移动变换。MEMENTO(备忘录)模式共151页第*页MEMENTO(备忘录)模式共151页第*页共151页第*页给定这些接口,我们可以实现MoveCommand的成员函数Execute和Unexecute如下:共151页第*页MEMENTO模式说明:A:定义:Memento对象是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态。B:Memento模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。共151页第*页MEMENTO模式C:Memento模式所涉及的角色有三个,备忘录角色、发起人角色和负责人角色。备忘录角色的作用:(1)将发起人对象的内部状态存储起来,备忘录可以根据发起人对象的判断来决定存储多少发起人对象的内部状态。(2)?备忘录可以保护其内容不被发起人对象之外的任何对象所读取。共151页第*页MEMENTO模式发起人角色的作用:(1)创建一个含有当前内部状态的备忘录对象。(2)使用备忘录对象存储其内部状态。负责人角色的作用:(1)负责保存备忘录对象(2)不检查备忘录对象的内容。共151页第*页Iterator模式目的:Iterator模式是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个类中进行,这样就避免了暴露这个聚合对象的内部表示的可能。共151页第*页Iterator模式动机一个聚合对象,如列表(list),应该提供一种方法来让别人可以访问它的元素,而又不需暴露它的内部结构.此外,针对不同的需要,可能要以不同的方式遍历这个列表。但是即使可以预见到所需的那些遍历操作,你可能也不希望列表的接口中充斥着各种不同遍历的操作。有时还可能需要在同一个表列上同时进行多个遍历。共151页第*页Iterator模式链表迭代器结构图:共151页第*页Iterator模式将遍历机制与列表对象分离使我们可以定义不同的迭代器来实现不同的遍历策略,而无需在列表接口中列举它们。例如,过滤表列迭代器(FilteringListIterator)可能只访问那些满足特定过滤约束条件的元素。注意:迭代器和列表是耦合在一起的,而且客户对象必须知道遍历的是一个列表而不是其他聚合结构。共151页第*页Iterator模式适用性:访问一个聚合对象的内容而无需暴露它的内部表示。支持对聚合对象的多种遍历。为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。共151页第*页Iterator模式结构:共151页第*页Iterator模式参与者Iterator(迭代器)—迭代器定义访问和遍历元素的接口。ConcreteIterator(具体迭代器)—具体迭代器实现迭代器接口。—对该聚合遍历时跟踪当前位置。Aggregate(聚合)—聚合定义创建相应迭

文档评论(0)

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

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

1亿VIP精品文档

相关文档