zoukankan      html  css  js  c++  java
  • Design Patterns(十九):Memento PatternVB代码

    结构图

     

    角色

    • 备忘录(Memento)角色:备忘录角色存储“备忘发起角色”的内部状态。“备忘发起角色”根据需要决定备忘录角色存储“备忘发起角色”的哪些内部状态。为了防止“备忘发起角色”以外的其他对象访问备忘录。备忘录实际上有两个接口,“备忘录管理者角色”只能看到备忘录提供的窄接口——对于备忘录角色中存放的属性是不可见的。“备忘发起角色”则能够看到一个宽接口——能够得到自己放入备忘录角色中的状态(属性)。
    • 原发器(Originator)角色:“备忘发起者角色”创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。
    • 备忘录管理者(Caretaker)角色:负责保存好备忘录。不能对备忘录的内容进行操作或检查。

    动机

    在软件构建过程中集合,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。
        如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。

    意图

      
    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

    示意性代码

    示意性代码

     一个实例

     下面的备忘录代码演示了暂时保存销售场景对象(Salesprospect)的内部状态,然后恢复销售场景对象(Salesprospect)的内部状态。

    实例代码

    Memento Pattern模式的几个要点:
    1、备忘录(Memento)存储原发器(Originator)对象的内部状态,在需要时回复原发器状态。Memento模式适用于“由原发器管理,却又必须存储在原发器之外的信息”
    2、在实现Memento模式中,要防止原发器以外的对象访问备忘录对象。备忘录对象有两个接口,一个为原发器使用的宽接口;一个为其他对象使用的窄接口。
         3、在实现Memento模式时,要考虑拷贝对象状态的效率问题,如果对象开销比较大,可以采用某种增量式改变来改进Memento模式。

    我的理解

    封装对象状态变化,支持状态保存/恢复。

    参考资料
    《C#面向对象设计模式纵横谈系列课程(21)》     李建中老师


  • 相关阅读:
    Android之SurfaceView学习(一)
    AS3的加载机制(带例子) 转载
    Timer与TimerTask的用法
    A*寻路初探 GameDev.net (转载)
    解决在Sql Server2005查询分析器中读取Excel表出现的一些问题
    svn更改用户问题
    MVC4 WEBAPI初探
    使用WORD2013发布blog
    一个IIS中可否支持两个版本的Freamwork
    web打印也能分页
  • 原文地址:https://www.cnblogs.com/sekihin/p/Memento_Pattern.html
  • Copyright © 2011-2022 走看看
    Creative Commons License 本作品采用 知识共享署名-非商业性使用 2.5 中国大陆许可协议进行许可。