// Originator
class Document {
private String content;
public Document(String content) {
this.content = content;
}
public void write(String text) {
this.content += text;
}
public String getContent() {
return this.content;
}
public DocumentMemento createMemento() {
return new DocumentMemento(this.content);
}
public void restoreFromMemento(DocumentMemento
memento) {
this.content = memento.getSavedContent();
}
}
// Memento
class DocumentMemento {
private String content;
public DocumentMemento(String content) {
this.content = content;
}
public String getSavedContent() {
return this.content;
}
}
// Caretaker
class History {
private List<DocumentMemento> mementos;
public History() {
this.mementos = new ArrayList<>();
}
public void addMemento(DocumentMemento
memento) {
this.mementos.add(memento);
}
public DocumentMemento getMemento(int index) {
return this.mementos.get(index);
}
}
public class MementoPattern {
public static void main(String[] args) {
Document document = new Document("Initial content\n");
History history = new History();
// Write some content
document.write("Additional content\n");
history.addMemento(document.createMemento());
// Write more content
document.write("More content\n");
history.addMemento(document.createMemento());
// Restore to previous state
document.restoreFromMemento(history.getMemento(1));
// Print document content
System.out.println(document.getContent());
}
}
Initial content
Additional content
More content