In meiner Anwendung möchte ich dem Benutzer eine kleine Rückgängig-Funktion zur Verfügung stellen. Es gibt nicht viele Aktionen, die vom Benutzer rückgängig gemacht werden können. Insbesondere sind die Aktionen:Wie implementiert man Funktionalität rückgängig machen?
- Notizen hinzufügen zu einem Objekt
- Farbe ein Objekt
- Tag ein objcet mit einem String
Nun dachte ich über, wie diese umzusetzen. Ich dachte zuerst an eine Aktionsklasse, die die abstrakte Basisklasse für die 3 verschiedenen Aktionen ist, die vom Benutzer ausgeführt werden können. Jedes Mal, wenn der Benutzer diese Aktionen übernimmt, wird eine neue geeignete Instanz einer Unterklasse dieser abstrakten Aktionsklasse erstellt und in eine Liste eingefügt, die alle Aktionen enthält.
Wenn der Benutzer etwas rückgängig machen möchte, wird die Liste dem Benutzer angezeigt und er kann auswählen, welche Aktion er rückgängig machen möchte.
Jetzt dachte ich, was in einem solchen Aktionsobjekt gespeichert werden muss:
- der Zustand des Objekts vor der Aktion
- die eigentliche Aktion, die (zum Beispiel die Zeichenfolge genommen wurde, die hinzugefügt wurde die notizen eines objekts)
Ich bin mir nicht sicher, ob das genug ist. Ich dachte auch über eine chronologische Reihenfolge nach, aber das sollte notwendig sein, da die Liste chronologisch korrekt sein kann.
Gibt es noch andere Dinge, die ich beachten sollte?
Suche nach dem Memento-Muster in GOF – pastjean
Oder Befehlsmuster – slayerIQ
Siehe auch hier: http://StackOverflow.com/Questions/49755/design-Pattern-for-undo-Engine –