设计模式-备忘录模式

概念

  • 随时记录一个对象的状态变化
  • 随时可以恢复之前的某个状态(如撤销功能)
  • 未找到JS中经典应用,除了一些工具(如编辑器)

演示

js 复制代码
// 状态备忘
class Memento {
    constructor(content) {
        this.content = content
    }
    getContent() {
        return this.content
    }
}

// 备忘列表
class CareTeker {
    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())
editor.getContentFromMemento(careTaker.get(1)) // 撤销
console.log(editor.getContent())
editor.getContentFromMemento(careTaker.get(0)) // 撤销
console.log(editor.getContent())

设计原则验证

  • 状态对象于使用者分开,解耦
  • 符合开放封闭原则
相关推荐
树深遇鹿4 分钟前
SSE(Server-Sent Events)的使用
前端·javascript·面试
晴殇i19 分钟前
抛弃 try-catch,错误处理的新方案
前端·javascript·面试
阿白的白日梦25 分钟前
package.json的workspaces配置
前端·javascript
Whbbit199929 分钟前
hono 集成 Better Auth
javascript·后端
ApeAssistant33 分钟前
Spring + 设计模式 (二十) 行为型 - 中介者模式
spring·设计模式
ApeAssistant38 分钟前
Spring + 设计模式 (十九) 行为型 - 访问者模式
spring·设计模式
〆、风神44 分钟前
从零实现分布式WebSocket组件:设计模式深度实践指南
分布式·websocket·设计模式
Mintopia1 小时前
计算机图形学进阶探索与实践
前端·javascript·计算机图形学