JavaScript中的备忘录模式

1,620 阅读1分钟

介绍

※ 随时记录一个对象的状态变化

※ 随时可以恢复之前的某个状态(如撤销功能)

※ 未找到 JS 中经典应用,除了一些工具(如编辑器)

实现代码(ES6)

//备忘类

class Memento{
    constructor(content){
        this.content = content
    }
    getContent(){
        return this.content
    }
}

// 备忘列表

class CareTaker {
    constructor(){
        this.list = []
    }
    add(memento){
        this.list.push(memento)
    }
    get(index){
        return this.list[index]
    }
}

// 编辑器

class Editor {
    constructor(){
        this.content = null
    }
    setContent(content){
        this.content = content
    }
    getContent(){
     return this.content
    }
    saveContentToMemento(){
        return new Memento(this.content)
    }
    getContentFromMemento(memento){
        this.content = memento.getContent()
    }
}

//测试代码

let editor = new Editor()
let careTaker = new CareTaker()


editor.setContent('111')
editor.setContent('222')
careTaker.add(editor.saveContentToMemento())
editor.setContent('333')
careTaker.add(editor.saveContentToMemento())
editor.setContent('444')

console.log(editor.getContent()) //444
editor.getContentFromMemento(careTaker.get(1))
console.log(editor.getContent()) //333

editor.getContentFromMemento(careTaker.get(0))
console.log(editor.getContent()) //222

设计原则

● 状态对象于使用者分开,解耦

● 符合开放封闭原则