Patrón Memento en C#: Guía Completa

Introducción: Guardar y volver

Memento permite capturar y restaurar el estado de un objeto sin violar su encapsulación. Es la base de funciones como deshacer/rehacer o checkpoints.

El estado queda encapsulado en un objeto memento, evitando exponer detalles internos.

Guardar estado
Prompt: Time capsule concept, minimal style, soft lighting.

1. Naturaleza: Semillas

Una semilla guarda el estado completo de una planta en potencia.

Es un snapshot compacto que conserva todo lo necesario para restaurar el estado en el futuro.

Semilla
Prompt: Seed in soil with sprout, macro photography, warm light.

2. Mundo Real: Deshacer en editores

Un editor guarda versiones para deshacer cambios.

Cada versión es un memento que se almacena sin revelar detalles internos del documento.

Undo
Prompt: UI undo icon with history timeline, modern flat design.

3. Implementación en C#: Código Paso a Paso

public class Memento { public string Estado { get; } public Memento(string e){ Estado=e; } }

public class Editor
{
    public string Texto { get; set; }
    public Memento Guardar() => new Memento(Texto);
    public void Restaurar(Memento m) => Texto = m.Estado;
}

// Uso
var editor = new Editor();
editor.Texto = "Hola";
var snap = editor.Guardar();
editor.Texto = "Hola mundo";
editor.Restaurar(snap);

4. Memento vs Snapshot

Memento protege la encapsulación. Un snapshot simple expone detalles internos.

El patrón define roles claros (Originator y Caretaker) para controlar quién puede restaurar el estado.

5. Diagrama UML

UML Memento
Prompt: UML diagram of Memento pattern, clean vector layout.
Restauración de estado
Prompt: State restore flow diagram, minimal infographic style.

⚠️ Cuándo NO Usar Memento

  • Si los estados son enormes y costosos de guardar.
  • Si puedes reconstruir el estado con eventos o logs más livianos.

💪 Ejercicio

Crea un editor con historial de 3 pasos de deshacer.

Conclusión

Memento es el patrón ideal para deshacer y restaurar estados. Es especialmente útil en editores, flujos de aprobación y procesos con rollback.