Memento
Capture and restore an object's internal state
The Memento pattern provides temporary storage as well as restoration of an object.
The mechanism in which you store the object’s state depends on the required duration of persistence, which may vary.
You could view a database as an implementation of the Memento design pattern in which objects are persisted and restored.
However, the most common reason for using this pattern is to capture a snapshot of an object’s state so that any subsequent changes can be undone easily if necessary.
In JavaScript Mementos are easily implemented by serializing and de-serializing objects with JSON.
EX:
var Person = function(name, street, city, state) {
this.name = name;
this.street = street;
this.city = city;
this.state = state;
}
Person.prototype = {
hydrate: function() {
var memento = JSON.stringify(this);
return memento;
},
dehydrate: function(memento) {
var m = JSON.parse(memento);
this.name = m.name;
this.street = m.street;
this.city = m.city;
this.state = m.state;
}
}
var CareTaker = function() {
this.mementos = {};
this.add = function(key, memento) {
this.mementos[key] = memento;
},
this.get = function(key) {
return this.mementos[key];
}
}
function run() {
var mike = new Person("Mike Foley", "1112 Main", "Dallas", "TX");
var john = new Person("John Wang", "48th Street", "San Jose", "CA");
var caretaker = new CareTaker();
// save state
caretaker.add(1, mike.hydrate());
caretaker.add(2, john.hydrate());
// mess up their names
mike.name = "King Kong";
john.name = "Superman";
// restore original state
mike.dehydrate(caretaker.get(1));
john.dehydrate(caretaker.get(2));
console.log(mike.name);
console.log(john.name);
}
run();
Last updated
Was this helpful?