O padrão Memento atende à necessidade de capturar e restaurar o estado interno de um objeto sem violar seu encapsulamento. Isso é útil em cenários onde você deseja implementar a funcionalidade de desfazer/refazer, permitindo que um objeto reverta para um estado anterior.
O padrão Memento envolve três componentes principais:
O originador cria uma lembrança contendo um instantâneo de seu estado atual. Esta lembrança pode então ser armazenada pelo zelador e usada para restaurar o estado do originador quando necessário.
Um exemplo prático do padrão Memento está em editores de texto que oferecem funcionalidade de desfazer/refazer. Cada alteração no documento pode ser salva como uma lembrança, permitindo ao usuário reverter aos estados anteriores do documento conforme necessário.
Padrão Memento no código:
// Originator public class Editor { private String content; public void setContent(String content) { this.content = content; } public String getContent() { return content; } public Memento save() { return new Memento(content); } public void restore(Memento memento) { content = memento.getContent(); } // Memento public static class Memento { private final String content; public Memento(String content) { this.content = content; } private String getContent() { return content; } } } // Caretaker public class History { private final Stackhistory = new Stack(); public void save(Editor editor) { history.push(editor.save()); } public void undo(Editor editor) { if (!history.isEmpty()) { editor.restore(history.pop()); } } } // Client code public class Client { public static void main(String[] args) { Editor editor = new Editor(); History history = new History(); editor.setContent("Version 1"); history.save(editor); System.out.println(editor.getContent()); editor.setContent("Version 2"); history.save(editor); System.out.println(editor.getContent()); editor.setContent("Version 3"); System.out.println(editor.getContent()); history.undo(editor); System.out.println(editor.getContent()); history.undo(editor); System.out.println(editor.getContent()); } }
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3