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.

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.

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.

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

Prompt: UML diagram of Memento pattern, clean vector layout.

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.