import java.util.ArrayList;
import java.util.List;

/**
 * {@link <a href=
 * "https://[Log in to view URL]"
 * target= "_blank"></a>}
 * 
 * @author itammb ( Italia Massimiliano Buscati )
 * @version JDK 1.15
 *
 */
class Main {
	public interface Originator<T> {
		public Memento save();

		public void setContent(T content);
	}

	public static class Document implements Originator<String> {
		private String content; // status

		public Document(String content) {
			this.content = content;
		}

		public void write(String text) {
			this.content += text;
		}

		public String getContent() {
			return this.content;
		}

		public void setContent(String content) {
			this.content = content;
		}

		public Memento save() {
			return new Memo(this, content);
		}
	}

	public interface Memento {
		public void restore();
	}

	public static class Memo implements Memento {

		private String content; // status
		private Originator<String> document; // originator

		public Memo(Originator<String> document, String content) {
			this.document = document;
			this.content = content;
		}

		public void restore() {
			document.setContent(content);
		}
	}

	public static class History {
		private List<Memento> mementos;

		public History() {
			mementos = new ArrayList<>();
		}

		public void addMemento(Memento memo) {
			mementos.add(memo);
		}

		public void undo() {
			Memento memo = mementos.remove(0);

			if (memo != null)
				memo.restore();
		}
	}

	public static void main(String args[]) {
		// Unit test - uso del design pattern: memento
		Document document = new Document("Initial content\n");

		History history = new History();

		// modifica stato
		document.write("Additional content\n");
		history.addMemento(document.save());

		// modifica stato
		document.write("More content\n");
		history.addMemento(document.save());

		System.out.println(document.getContent());

		// ripristina stato precedente
		history.undo();

		System.out.println(document.getContent());
	}
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: