Command Pattern - Wo speichert man den Zustand eines Objektes für Undo?



  • Ich implementiere gerade das Command Pattern zum Lernen und will gleich ein Undo mit einbauen. Nun frage ich mich, wo soll ich den Zustand meine Objektes speichern um ein Undo überhaupt zu ermöglichen? Der Invoker merkt sich ja was aufgerufen wurde und in welcher Reihenfolge, aber er weiß doch nix von den Zuständen der Objekte. Soll der Receiver davon was wissen, oder lieber nur der das konkrete Kommando?

    In meinen Falle habe ich ein Receiver der eine Lösche-Rückwärts-Funktion(Backspace) für Text hat. Es gibt diesen Receiver für Zeichen, als auch für Wörter. Nun würde ja ein Undo bedeuten, ich stelle den letzten Zustand des Textes wieder her, also muss er ja zuvor gespeichert worden sein. Nur wo? Im Receiver selbst oder in dem konkreten Befehl, der von der Befehls-Schnittstelle erbt?



  • Die Undo Informationen speicherst du im Kommando. Wenn das Kommando z.B. ein Zeichen aus dem Text löscht, dann weiß es auch, wo es löschen soll. Und was. Damit kannst du in der Undo Methode das gelöschte Zeichen wieder an der Stelle einfügen, wo du es gelöscht hast.



  • Danke für deine Antwort. Ich habe auch gerade gelesen, dass es auch vom konkreten Fall abhängt. Das Command kann nur zum Receiver delegieren, aber auch die gesamte Logik enthalten, also ist dies von Fall zu Fall unterschiedlich.

    Aber die Design Pattern sind ja eh nur eine grobe Richtung, die man sich dann auf Maß schneidert.



  • Auch wenn die Logik an einer anderen Stelle implementiert ist und das Commando nur delegiert, muss es ja irgendlweche Informationen über den Zustand speichern, damit es irgendwas sinnvoll aufrufen kann. Und das war ja deine Frage.


Anmelden zum Antworten