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