备忘录的设计模式.ppt

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

备忘录设计模式 备忘录模式是数据备份与恢复的所依赖的重要框架。本节用此框架演绎了《廊桥遗梦》中的感人的爱情故事。后续又揭露了数据库的备份与恢复原理。目的是通过生动的例子让大家领略到备忘录模式的风采。把它真正地引入到我们的代码中来。 在《廊桥遗梦》中,弗朗西丝深爱着罗伯特,但弗朗西丝有家庭,为了责任,她选择了把爱放在心底。在家里,弗朗西丝要爱丈夫,爱孩子,但这种亲情的爱,却不能埋没他对情人罗伯特刻骨的真爱。这种有新情不忘旧情的境界可以用备忘录模式表现出来。下面请看类图: 先讲个爱情故事 从类图上看出弗朗西丝在面对丈夫和孩子的时候要把自己对罗伯特的爱情隐藏起来。所以在Girl类状态属性用来表达弗朗西丝现在的感情状态,是在想着家人的衣食住行还是在思念罗伯特。在弗朗西丝的感情中对罗伯特的爱是她整个思想的主线,只有在面对家人时,才把这份爱情放下(也就是把对罗伯特的爱备份起来),等到操劳完家务以后她又会重新想起罗伯特(恢复对罗伯特的思念)。在Girl类中有createMemento()和restoreMemento()正是记录弗朗西丝备份与恢复感情历程的函数。那么Memento类是干嘛的那?从Girl类中createMemento()和restoreMemento()两个函数可以看出Memento类是用来备份弗朗西丝感情的。而Manger类正是管理这个感情备份的,他一个管家一样看护这这个备份,以免备份泄露,对主人弗朗西丝造成不利的影响。 从类图的角度演绎女主角的感情世界 从类图上看出备忘录模式有三个重要角色: Girl:发起者角色,里面包含着状态属性 (state)。以及对状态备份(createMemento())、更改(changeState())、恢复(restoreMemento())等函数。 Memento:备忘录角色,它主要负责对状态进行备份,它被Girl(发起者角色)依赖,通过Girl类中的createMemento()和restoreMemento()函数实现对状态的备份和恢复。 Manger:管理角色是对备份的管理角色。它与备份类形成聚合关系。使代码逻辑清晰,符合单一职责原则。 代码:com.li.normal 审视备忘录模式的三个角色 需要保存和恢复数据相关状态场景; 提供一个可回滚的操作; 需要监控的副本场景中,例如要控制一个对象的属性,但监控又不应该作为系统的主要业务来调用,它只是边缘应用,即使是出现监控不准,对系统影响也不大,一般的做法是备份一个主线程的对象,然后由分析程序分析。 数据库的事物管理就是用的备忘录模式 使用场景 备忘录的生命周期,备忘录创建出来就是在“最近”代码中使用,要主动管理他的生命周期,建立就要使用,不使用就立即删除其引用,等待垃圾回收器对它的处理。 备忘录的性能,不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中)原因有二:一是控制不了建立备忘录的数量。二,大对象的建立是要消耗资源的,系统的性能需要考虑。因此,如果出现这样的代码,设计师就要考虑怎么修改架构了。 注意事项 1997年2月,绵羊“多利”诞生。这一个不寻常的生命。这是英国生物学家通过从绵阳身上取下是一个细胞,复制出的绵阳宝宝,克隆技术由此而生。 Java对克隆技术的应用主要是对对象的创建,它采取二进制的方式,大大提高了创建对象的效率。 克隆备忘录使用了java的克隆机制,利用克隆实现备份。 克隆备忘录 下面我们从类图和代码的角度,演绎下多利的诞生过程。 类图: 代码:com.li.clone 见证多利的诞生 通过类图可以看出,克隆备忘录主要由两个角色: Sheep:发起者角色,包含状态属性(state),备份状态函数(createMemento())、和恢复函数(restoreMemento())。 Manager 对发起者绵阳进行管理。 另外Sheep类还实现了Clonable接口,实现了clone函数,目的是在关键时刻创建自己的替身多利。 绵阳平时悠然地在大自然中吃草,但狼来了的时候,它就创建个替身多利,就像孙悟空拔根毫毛变成小猴子一样,替他喂狼,自己则逃之夭夭。 代码:com.li.clone 从角色入手 和普通备忘录相比,克隆备忘录省略了备忘录角色(Memento),Manager类直接管理创始类角色(Sheep)。 优点:程序简单了,对高层依赖减少了。 面临深拷贝和浅拷贝的问题,在复杂场景它会让逻辑异常混乱,出现错误也很难跟踪。 克隆感悟 在实际开发中一个对象不可能只有一个状态,一

您可能关注的文档

文档评论(0)

克拉钻 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档