Open main menu

CDOT Wiki β

Changes

Memento

2,182 bytes added, 18:29, 13 April 2007
no edit summary
//State = On
</pre>
 
This is a simple example of a memento in Java:
 
<pre>
import java.util.*;
 
class Originator {
private String state;
/* lots of memory consumptive private data that is not necessary to define the
* state and should thus not be saved. Hence the small memento object. */
 
public void set(String state) {
System.out.println("Originator: Setting state to "+state);
this.state = state;
}
 
public Object saveToMemento() {
System.out.println("Originator: Saving to Memento.");
return new Memento(state);
}
public void restoreFromMemento(Object m) {
if (m instanceof Memento) {
Memento memento = (Memento)m;
state = memento.getSavedState();
System.out.println("Originator: State after restoring from Memento: "+state);
}
}
 
private static class Memento {
private String state;
 
public Memento(String stateToSave) { state = stateToSave; }
public String getSavedState() { return state; }
}
 
}
 
class Caretaker {
private ArrayList savedStates = new ArrayList();
 
public void addMemento(Object m) { savedStates.add(m); }
public Object getMemento(int index) { return savedStates.get(index); }
}
 
class MementoExample {
public static void main(String[] args) {
Caretaker caretaker = new Caretaker();
 
Originator originator = new Originator();
originator.set("State1");
originator.set("State2");
caretaker.addMemento( originator.saveToMemento() );
originator.set("State3");
caretaker.addMemento( originator.saveToMemento() );
originator.set("State4");
 
originator.restoreFromMemento( caretaker.getMemento(1) );
}
}
 
/*Output:
*
* Originator: Setting state to State1
* Originator: Setting state to State2
* Originator: Saving to Memento.
* Originator: Setting state to State3
* Originator: Saving to Memento.
* Originator: Setting state to State4
* Originator: State after restoring from Memento: State3
*/
</pre>
 
 
== References ==
[http://www.dofactory.com/Patterns/PatternMemento.aspx#_self1 Data & Object Factory]
[http://en.wikipedia.org/wiki/Memento_pattern Wikipedia]
1
edit