Zhengrenzhe

(°∀°)ノ 老打杂了

用户工具

站点工具


设计模式:模式:备忘录模式

备忘录模式(Memento Pattern)

Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.

备忘录模式的意义在于它会捕获一个对象的内部状态,将其存储起来。等将来需要回滚时,就可以使用之前存储的状态。备忘录模式不关心到底是如何存储与恢复的,应为每个对象都可能有不同的备份恢复操作。备忘录模式只是一个对其过程的描述。

class Card {
    foo() {

    }

    bar() {

    }

    backup() {

    }

    restore() {

    }
}

备忘录模式通常用来实现undo/redo操作,前面已经说过的命令模式也是用来干这个的,但两种是不同的实现思路:

  • 使用命令模式实现undo/redo,需要定义所有命令的反命令,这会是一个极大的工作量。而且可能有些命令的反命令会比命令本身更加复杂。但其优点是内存占用低,只需要记录调用过的命令就行了,因为整个系统所处的状态都是有命令/反命令+当前状态来实时计算出来的。
  • 使用备忘录模式则不需要定义反命令,直接存下来当前系统的状态就行了,就像虚拟机的快照。但问题就是占用内存大,因为每个状态都会创建一份备份。所以可能需要一些diff算法来减少内存占用。
设计模式/模式/备忘录模式.txt · 最后更改: 2020/03/10 00:55 由 zhengrenzhe