在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有”后悔药”可吃。
如何解决:通过一个备忘录类专门存储对象状态。
关键代码:客户不与备忘录类耦合,与备忘录管理类耦合。
应用实例: 
1、打游戏时的存档。 
2、Windows 里的 ctrl + z。 
3、IE 中的后退。 
4、数据库的事务管理。
class Memento{constructor(content){this.content = content}getContent(){return this.content}}class MementoList{constructor(){this.list = []}add(memento){this.list.push(memento)}get(index){return this.list[index]}}class Editor{constructor(){this.content = ''}getContent(){return this.content}setContent(content){this.content = content}saveContentToMemento(){return new Memento(this.content)}getContentFromMemento(memento){this.content = memento.getContent()}}const ediotor = new Editor()const mementos = new MementoList()ediotor.setContent("aaa")ediotor.setContent("bbbb")mementos.add(ediotor.saveContentToMemento()) // 记录当前状态ediotor.setContent("cccc")mementos.add(ediotor.saveContentToMemento()) // 又记录一次ediotor.setContent("dddd")// 查看当前编辑器内容console.log(ediotor.getContent()); // dddd// 恢复步骤2的内容(用的下标)ediotor.getContentFromMemento(mementos.get(1)) // ccccconsole.log(ediotor.getContent())// 恢复步骤1的内容ediotor.getContentFromMemento(mementos.get(0))console.log(ediotor.getContent()) // bbbb
