Memento — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

Principii și arhitectură / Șabloane de proiectare / Comportamentale

Memento

Note originale de SunDiaL · Vezi sursa în engleză

Problema: Trebuie să revii la o stare anterioară a unui obiect. Gândește-te, de exemplu, la editoarele de text sau la programele de desen/pictură: poți apăsa oricând Ctrl+Z pentru a anula o acțiune. Soluția: La fel ca în cazul Prototipului, singura clasă care știe suficient pentru a putea reveni corect la starea anterioară este clasa însăși.

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