3.6 备忘录模式(memento)
- 保存一个对象的某个状态,以便在适当的时候恢复对象。
- 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
function Memento(value) {
this.value = value
}
//创始者
var originator = {
store: function (val) {
return new Memento(val)
},
restore: function (memento) {
return memento.value
}
}
// 守护者看门的
function Caretaker() {
this.values = []
}
Caretaker.prototype.addMemento = function (memento) {
this.values.push(memento)
}
Caretaker.prototype.getMemento = function (index) {
return this.values[index]
}
module.exports = [originator, Caretaker]
const expect = require('chai').expect
const [originator, Caretaker] = require('../src/behavioral/memento/memento')
describe('备忘录模式 测试', () => {
it('看门的', () => {
var careTaker = new Caretaker()
careTaker.addMemento(originator.store('hello'))
careTaker.addMemento(originator.store('hello world'))
careTaker.addMemento(originator.store('hello world !!!'))
var result = originator.restore(careTaker.getMemento(1))
expect(result).to.equal('hello world')
})
})
es6 实现
class Memento {
constructor(value) {
this.value = value
}
}
const originator = {
store: function (val) {
return new Memento(val)
},
restore: function (memento) {
return memento.value
}
}
class Caretaker {
constructor() {
this.values = []
}
addMemento(memento) {
this.values.push(memento)
}
getMemento(index) {
return this.values[index]
}
}
export { originator, Caretaker }
const expect = require('chai').expect
import { Caretaker, originator } from '../src/behavioral/memento/memento_es6'
describe('备忘录模式 es6测试', () => {
it('看门的', () => {
var careTaker = new Caretaker()
careTaker.addMemento(originator.store('hello'))
careTaker.addMemento(originator.store('hello world'))
careTaker.addMemento(originator.store('hello world !!!'))
var result = originator.restore(careTaker.getMemento(1))
expect(result).to.equal('hello world')
})
})