"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Comprender el patrón de diseño Memento en Java

Comprender el patrón de diseño Memento en Java

Publicado el 2024-08-07
Navegar:643

Understanding the Memento Design Pattern in Java

Problema

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.

Solución

El patrón Memento involucra tres componentes principales:

  1. Originador: El objeto cuyo estado interno debe guardarse y restaurarse.
  2. Memento: Un objeto que almacena el estado interno del autor. El recuerdo es inmutable.
  3. Cuidador: Responsable de solicitar al autor que guarde o restaure su estado a partir de un recuerdo.

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.

Pros y contras

Ventajas

  • Conserva la encapsulación: Permite guardar y restaurar el estado interno de un objeto sin exponer los detalles de su implementación.
  • Deshacer/Rehacer simple: Facilita la implementación de la funcionalidad deshacer/rehacer, haciendo que el sistema sea más robusto y fácil de usar.
  • Historial de estados: Permite mantener un historial de estados anteriores del objeto, permitiendo la navegación entre diferentes estados.

Contras

  • Consumo de memoria: Almacenar varios recuerdos puede consumir una cantidad significativa de memoria, especialmente si el estado del objeto es grande.
  • Complejidad adicional: Introduce complejidad adicional al código, con la necesidad de gestionar la creación y restauración de recuerdos.
  • Responsabilidad del cuidador: El cuidador necesita administrar los recuerdos de manera eficiente, lo que puede agregar responsabilidad y complejidad al sistema.

Ejemplo de aplicación en el mundo real

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.

Código de ejemplo en Java

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 Stack history = 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());
    }
}
Declaración de liberación Este artículo se reproduce en: https://dev.to/diegosilva13/understanding-the-memento-design-pattern-in-java-2c72?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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