Z

备忘录模式(Memento Pattern)

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

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

 1class Card {
 2    foo() {
 3 
 4    }
 5 
 6    bar() {
 7 
 8    }
 9 
10    backup() {
11 
12    }
13 
14    restore() {
15 
16    }
17}

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

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