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());
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: