Memento-Pattern

In diesem Zirkular möchte ich ein paar Worte zu einem speziellen Entwurfsmuster, dem Memento-Pattern, verlieren.

Zunächst: was sind Entwurfsmuster?

Entwurfsmuster (oder auch Design Patterns) sind praxisbewährte Standardlösungen für wiederkehrende Aufgabenstellungen der Softwareentwicklung. Sie beinhalten meist textuelle Anweisungen zur Implementierung eines Teilproblems, für welches man ein Entwurfsmuster als passend identifiziert hat. Der Vorteil der Anwendung eines Entwurfsmusters ist, daß man von der Erfahrung anderer Programmierer profitieren kann, da Entwurfsmuster robust sind, d.h. oftmals schon Lösungen mitbringen für Effekte oder Unwägbarkeiten, an die der anwendende Programmierer vielleicht noch gar nicht gedacht hatte, als er auf das Problem stieß.

Das Memento-Pattern

Ein Memento ist ein Objekt, welches den internen Zustand eines anderen Objekts speichert. Ziel ist es, eine Anwendungssoftware jederzeit wieder in diesen Zustand zurückversetzen zu können. Zur Wahrung des guten Programmierstils sollte außerhalb des zu speichernden Objekt nichts über dessen interne Struktur bekannt sein (Datenkapselung). Das zu speichernde Objekt muß deshalb in der Lage sein, Memento-Objekte eindeutig ein- und auspacken zu können und sie mit der Außenwelt auszutauschen.

Ein Beispiel für die Programmierung eines Memento-Patterns ist eine Undo/Redo-Funktionalität (rückgängig/wiederholen), die man von fast allen Programmen kennt. Mit Memento-Objekten ist es für Applikationen leicht, eine Undo-/Redo-Funktionalität sicherzustellen. Sie muß nur die für sie atomar aussehenden Memento-Objekt in einer Liste merken und beim Undo beispielsweise das passende Exemplar heraussuchen und es dem observierten Objekt zur Wiederherstellung übergeben. Ebenso einfach gestaltet sich die Frage, ob der momentane Zustand auf der Festplatte gespeichert ist oder nicht.

Einige Beispielimplementationen zum Memento-Entwurfsmuster finden sich in der englischen Wikipedia.