Memento Pattern
HTWG Konstanz Design Patterns & Refactoring Jens Hensler
Memento Pattern ‐ Allgemein
Memento [lat.]: Erinnerung
Klassifizierung: objektbasiertes Verhaltensmuster
Alias: Token, Snapshot
Memento Pattern ‐ Allgemein
Zweck
Erfassung und Auslagerung des internen Zustandes eines Objektes, ohne seine
Kapselung zu verletzen, so dass das Objekt später in diesen Zustand
zurückversetzt werden kann.
Anwendung
Undo/ Redo‐Operationen in allen Bereichen
Transaktionsprotokollierung, z.B. bei Datenbanken
Zustandsinformationen einer Anwendung zum Schutz vor Hardwareausfallen erfassen
Memento Pattern ‐ Struktur
Memento Pattern ‐ Teilnehmer
Memento
speichert den internen Zustand des Originator‐
Objektes
Caretaker (Au4ewahrer)
ist für AuVewahrung und Verwaltung des Memento zuständig
Interne Zustand des
Mementos ist für ihn nicht zugreiVar
Originator (Urheber)
erzeugt ein Memento seines gegenwärtigen internen Zustandes
benutzt das Memento, um seinen internen (alten)
Zustand
wiederherzustellen
Memento Pattern ‐ Sequenzdiagramm
Memento Pattern ‐ Beispiel
Originator
Memento Pattern ‐ Beispiel
Memento
Memento Pattern ‐ Beispiel
Caretaker
Memento Pattern ‐ Beispiel
Beispiel Main
Memento Pattern ‐ Beispiel
Konsolen
Ausgaben: [Peter,Pan: 0176‐34567,
Homer,Simpson: 0343‐345664, Ernie,Sesamsrasse: 034‐666666, Pippi,Langstrumpf: 0172‐487456]
[Peter,Pan: 0176‐34567,
Homer,Simpson: 0343‐345664, Ernie,Sesamsrasse: 034‐666666, Pippi,Langstrumpf: 0172‐487456, Angela,Merkel: 0145‐3277899,
Arnold,Schwarzenegger: 0120‐3483997]
[Peter,Pan: 0176‐34567,
Homer,Simpson: 0343‐345664, Ernie,Sesamsrasse: 034‐666666, Pippi,Langstrumpf: 0172‐487456]
Erzeugung des Memento
Wiederherstellung des Mementos
Memento Pattern – Pro/ Contra
Wahrung der
Kapselungsgrenzen
Vereinfachung des Originators
- Verwendung von Mementi kann teuer sein
- Versteckte Kosten beim AuVewahren von
Mementi
Memento Pattern – Verwandte Pattern
Comando Pattern
Kann Memento Pattern verwenden um eine Undo Operation bereitzustellen
Iterator Pattern
Iterator Pattern kann
Memento verwenden um Zustand einer Iteration zu speichern.