Memento — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

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;
	}
}