Memento
Definition
Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
UML class diagram
Participants
- Memento
- stores internal state of the Originator object. The memento may store as much or as little of the originator's internal state as necessary at its originator's discretion.
- Originator
- creates a memento containing a snapshot of its current internal state.
- uses the memento to restore its internal state
- Caretaker
- is responsible for the memento's safekeeping
- never operates on or examines the contents of a memento.
Sample code in Java
package com.hong.memento; class Memento { private String state; public Memento(String state){ this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } } class CareTaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } } class Originator { private String state; public Memento createMemento(){ return new Memento(state); } public String getState() { return state; } public void setState(String state) { this.state = state; } public void setMemento(Memento memento){ this.state = memento.getState(); } } public class Memento_structure { public static void main(String[] args) { Originator originator = new Originator(); originator.setState("state_one"); CareTaker careTaker = new CareTaker(); careTaker.setMemento(originator.createMemento()); System.out.println(originator.getState()); //Change originator's state. originator.setState("state_two"); System.out.println(originator.getState()); //Reverse back the originator state. originator.setMemento(careTaker.getMemento()); System.out.println(originator.getState()); } }