备忘录模式(behavioral 6)

218 阅读1分钟

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')
	})
})