zoukankan      html  css  js  c++  java
  • 十一个行为模式之备忘录模式(Memento Pattern)

    定义:
    在不破坏原有封装的情况下,捕获一个对象的内部状态,并在对象之外保存。当对象出错或者无效是,可以根据该备忘录进行恢复。

    结构图:

    • Originator:原发类,被记录的对象,包含若干内部状态。一般定义了一个createMemento()方法用于生产一个备忘录,记录当前的状态。
    • Memento:备忘录类,类的结构和原发类相似,选择性地选取原发类的属性作为自己的属性,用于存储原发类的状态。该类有严格的访问控制,除了原发类和负责人类可以访问,备忘录不能提供给其它类使用。
    • Caretaker:负责人类,用于管理和存储备忘录。但是不能更改的内容进行操作和检验。

    注意:

    • 在设计备忘录类的时候,不累Originator类,不允许其它类调用备忘录类的构造函数,或者改变备忘录类的状态。再具体实现的时候,C++可以使用友元类来进行实现;Java可以使用内部类或者同一个包下来实现。
    • 在设计负责人类的时候,如果要实现多次撤销或者redo的操作,需要使用一个队列来存储按照时间的多个备忘录。通过对队列的正向和反向遍历来完成撤销或者redo操作。

    优点:

    • 提供了一种状态恢复机制,使得用户可以方便地回到历史的一个特定历史步骤。
    • 备忘录封装了类的当前状态,而不会被其它类改动。可以使用队列或者栈进行多次撤销操作。

    缺点:

    • 当原发类或者备忘录太多的时候严重浪费系统资源,每保存一个对象就要使用一定的内存空间。

    实例:
    MementoPattern.java

  • 相关阅读:
    避免文本字体大小重置
    为webapp应用制定IOS,Android桌面快捷图标
    兄弟节点 疑问的
    节点属性
    区别getElementByID,getElementsByName,getElementsByTagName
    三种快排四种优化(转载)
    快排(模板)
    二分法求解最大值或最小值(模板)
    中国剩余定理(转载)(中国剩余定理与扩展欧几里德的联系)
    简单母函数(转载)
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6083338.html
Copyright © 2011-2022 走看看