Memento
Captura y restaura el estado interno de un objeto sin violar su encapsulación.
Contexto
Editor de texto/imagen necesita undo. El estado es complejo (selección, historial, buffers).
Problema
Exponer el estado para guardarlo desde fuera rompe encapsulación.
Solución
El objeto produce un Memento opaco para el exterior; solo él sabe restaurarse desde uno.
#Ejemplo en C#
public class Editor
{
private string _content = "";
public Memento Save() => new(_content);
public void Restore(Memento m) => _content = m.State;
public class Memento
{
internal string State { get; }
internal Memento(string s) => State = s;
}
}Tradeoffs
| Pro | Contra |
|---|---|
| Mantiene encapsulación | Puede consumir mucha memoria |
#behavioral #gof #snapshot