El patrón Memento aborda la necesidad de capturar y restaurar el estado interno de un objeto sin violar su encapsulación. Esto es útil en escenarios en los que desea implementar la funcionalidad de deshacer/rehacer, permitiendo que un objeto vuelva a un estado anterior.
El patrón Memento involucra tres componentes principales:
El autor crea un recuerdo que contiene una instantánea de su estado actual. El cuidador puede almacenar este recuerdo y utilizarlo para restaurar el estado del autor cuando sea necesario.
Un ejemplo práctico del patrón Memento se encuentra en los editores de texto que ofrecen funcionalidad de deshacer/rehacer. Cada cambio en el documento se puede guardar como un recuerdo, lo que permite al usuario volver a estados anteriores del documento según sea necesario.
Patrón de recuerdo en 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()); } }
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3