class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
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 setState(String state) {
System.out.println("Originator: Setting state to " + state);
this.state = state;
}
public Memento save() {
System.out.println("Originator: Saving to Memento.");
return new Memento(state);
}
public void restore(Memento m) {
state = m.getState();
System.out.println("Originator: State after restoring from Memento: " + state);
}
}
class Caretaker {
private ArrayList<Memento> mementos = new ArrayList<>();
public void addMemento(Memento m) {
mementos.add(m);
}
public Memento getMemento() {
return mementos.get(1);
}
}
public class MementoDemo {
public static void main(String[] args) {
Caretaker caretaker = new Caretaker();
Originator originator = new Originator();
originator.setState("State1");
originator.setState("State2");
caretaker.addMemento( originator.save() );
originator.setState("State3");
caretaker.addMemento( originator.save() );
originator.setState("State4");
originator.restore( caretaker.getMemento() );
}
}
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
Support our free website and own the eBook!
22 design patterns and 8 principles explained in depth
406 well-structured, easy to read, jargon-free pages