// 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