zhangdizhangdi

备忘录模式

定义

备忘录模式(Memento Pattern),保存一个对象的某个状态,以便在适当的时候恢复对象。

实现

js
class Person {
  constructor(name, street, city, state) {
    this.name = name
    this.street = street
    this.city = city
    this.state = state
  }
  hydrate() {
    const memento = JSON.stringify(this)
    return memento
  }
  dehydrate(memento) {
    const m = JSON.parse(memento)
    this.name = m.name
    this.street = m.street
    this.city = m.city
    this.state = m.state
  }
}

class CareTaker {
  mementos = {}
  add(key, memento) {
    this.mementos[key] = memento
  }
  get(key) {
    return this.mementos[key]
  }
}

const mike = new Person('Mike Foley', '1112 Main', 'Dallas', 'TX')
const john = new Person('John Wang', '48th Street', 'San Jose', 'CA')
const caretaker = new CareTaker()

caretaker.add(1, mike.hydrate())
caretaker.add(2, john.hydrate())

mike.name = 'King Kong'
john.name = 'Superman'

console.log('mike.name: ', mike.name)
console.log('john.name: ', john.name)

mike.dehydrate(caretaker.get(1))
john.dehydrate(caretaker.get(2))

console.log('mike.name: ', mike.name)
console.log('john.name: ', john.name)
执行结果
mike.name:  King Kong
john.name:  Superman
mike.name:  Mike Foley
john.name:  John Wang

参考