Mit dem Memento-Pattern kann man ohne die Kapselung zu verletzen, den internen Zustand eines Objekts erfassen und externalisieren, so dass das Objekt später wieder in diesen Zustand versetzt werden kann.
Klassendiagramm
Implementierung
Originator.cs
public class Originator
{
private string _state = "";
public void SetState(string state)
{
_state = state;
}
public string GetState()
{
return _state;
}
public Memento CreateMemento()
{
return new(_state);
}
public void Restore(Memento memento)
{
_state = memento.GetState();
}
}
Memento.cs
public class Memento
{
private readonly string _state;
public Memento(string state)
{
_state = state;
}
public string GetState()
{
return _state;
}
}
Caretaker.cs
public class Caretaker
{
private readonly List<Memento> _mementos = [];
public void AddMemento(Memento memento)
{
_mementos.Add(memento);
}
public Memento GetMemento(int index)
{
return _mementos[index];
}
}
Beispiel
Klassendiagramm
Implementierung
TextBox.cs
public class TextBox
{
private string _text = "";
public void SetText(string text)
{
_text = text;
}
public string GetText()
{
return _text;
}
public TextState Save()
{
return new(_text);
}
public void Restore(TextState textState)
{
_text = textState.GetText();
}
}