Principios y arquitectura / Patrones de diseño / De comportamiento
Memento
Notas originales de SunDiaL · Ver fuente en inglés
El problema: Necesitas volver a un estado anterior de un objeto. Por ejemplo, piensa en los editores de texto o los programas de dibujo y pintura: puedes pulsar ctrl+z en cualquier momento para deshacer. La solución: Al igual que en Prototype, la única clase que sabe lo suficiente para restaurar correctamente el estado es la propia clase.
public class MementoExample
{
/// <summary>
/// Nested class has access to outer class privates therefore it can store state.
/// </summary>
public class StateSnapshot
{
internal readonly int someStateFields;
public StateSnapshot(MementoExample source)
{
someStateFields = source.SomeStateFields;
}
}
private int SomeStateFields;
public StateSnapshot CreateSnapshot()
{
return new StateSnapshot(this);
}
public void RestoreFrom(StateSnapshot snapshot)
{
this.SomeStateFields = snapshot.SomeStateFields;
}
}