Muitos sistemas precisam voltar a um estado anterior.
O desafio é fazer isso sem expor os detalhes internos do objeto que teve seu estado alterado.
undo
class EditorTexto { private String conteudo; private int cursor; public Memento criarSnapshot() { return new Memento(conteudo, cursor); } public void restaurar(Memento memento) { this.conteudo = memento.conteudo; this.cursor = memento.cursor; } }
class HistoricoEditor { private final Stack<EditorTexto.Memento> pilha = new Stack<>(); public void salvar(EditorTexto editor) { pilha.push(editor.criarSnapshot()); } public void desfazer(EditorTexto editor) { if (!pilha.isEmpty()) { editor.restaurar(pilha.pop()); } } }
redo