Patrón Memento

¿Qué es el Patrón Memento?

El Memento es un patrón de diseño de comportamiento que permite guardar el estado interno de un objeto en un momento específico, para poder restaurarlo más tarde. Es útil en sistemas con funcionalidades de deshacer/rehacer o recuperación de estados anteriores.

Código de Ejemplo en JavaScript

            
class Memento {
  constructor(state) {
    this.state = state;
  }

  getState() {
    return this.state;
  }
}

class Originator {
  constructor() {
    this.state = "";
  }

  setState(state) {
    this.state = state;
    console.log(`Estado actual: ${this.state}`);
  }

  saveState() {
    return new Memento(this.state);
  }

  restoreState(memento) {
    this.state = memento.getState();
    console.log(`Estado restaurado: ${this.state}`);
  }
}

class Caretaker {
  constructor() {
    this.mementos = [];
  }

  addMemento(memento) {
    this.mementos.push(memento);
  }

  getMemento(index) {
    return this.mementos[index];
  }
}

// Uso del Patrón Memento
const originator = new Originator();
const caretaker = new Caretaker();

originator.setState("Estado 1");
caretaker.addMemento(originator.saveState());

originator.setState("Estado 2");
caretaker.addMemento(originator.saveState());

originator.setState("Estado 3");

originator.restoreState(caretaker.getMemento(0)); // Restaura al "Estado 1"

        

Casos de Uso

  • Implementar funcionalidades de deshacer y rehacer en aplicaciones de edición.
  • Guardar el progreso de un usuario en un videojuego.
  • Recuperar configuraciones previas en un sistema de software.

Patrones Relacionados

  • Command: Complementa al Memento al encapsular operaciones que pueden deshacerse.
  • Prototype: Crea copias completas de un objeto, pero no está enfocado en guardar estados.
  • State: Gestiona cambios de estado, mientras que Memento guarda el estado actual.
Whatsapp Mentores Tech