Java Reference
In-Depth Information
3. Undo-/Redo-Funktionalität - Rückgängigmachen von Befehlen
Ein Undo-/Redo-Mechanismus kann realisiert werden, indem die Referenzen auf aus-
geführte Befehle gespeichert werden. Entsprechende undo() - und redo() -Methoden
müssen in jeder einzelnen konkreten Befehlsklasse implementiert werden. Werden die
Referenzen auf die ausgeführten Befehle dann in einem Befehlsstack abgelegt, so
kann festgestellt werden, welcher Befehl als nächstes rückgängig gemacht oder erneut
ausgeführt werden soll.
4. Zusammengesetzte Befehle - Makros
Mit Hilfe des Kompositum-Musters kann ein Befehl aus mehreren Befehlen zusam-
mengesetzt werden. Dies erlaubt eine vereinfachte Behandlung von Operationen, die
auf vielen Objekten agieren und dabei verschiedene Aktionen auf diesen Objekten
durchführen. Das Interface IBefehl übernimmt die Rolle eines Knotens der Kompo-
nente im Kompositum-Muster, ein einfacher konkreter Befehl ist ein Blatt und ein
Makro entspricht einem Kompositum.
5. Transaktionen - Rollback
Ein zusammengesetzter Befehl kann den Zustand der zu verändernden Objekte fest-
halten und danach erst seine Operationen ausführen. Wenn dann eine dieser Opera-
tionen fehlschlägt, kann der Befehl die Objekte wieder in den Zustand vor dem Befehl
zurücksetzen, ganz analog zu einem Rollback einer Datenbank. Zur Speicherung des
Zustands kann das in diesem Buch nicht behandelte Memento-Pattern (siehe bei-
spielsweise [Gam95]) eingesetzt werden.
6. Recovery nach Systemcrash - persistente Speicherung der Befehle
Wenn die Referenzen auf die ausgeführten Befehle persistent gespeichert werden,
können sie nach einem Systemcrash - wie bei einem Transaction Log - zurückge-
spielt werden.
4.10.6
Ähnliche Entwurfsmuster
Das Entwurfsmuster Strategie ist ähnlich dem Entwurfsmuster Befehl: beide kapseln
einen Methodenaufruf in einem eigenständigen Objekt. Die Teilnehmer haben andere
Namen, entsprechen sich aber wie folgt: der Aufrufer heißt beim Strategie-Muster Kon-
text, das Interface IBefehl heißt dort IStrategie . Das Entwurfsmuster Befehl ist
jedoch allgemeiner anwendbar: Ein Befehl ist allgemeiner definiert, während bei den
Strategien davon ausgegangen wird, dass alle Strategien funktional gleich sind. Ein
weiterer Unterschied ist, dass die Befehle von einem Empfänger ausgeführt werden,
während eine Strategie immer nur vom Kontextobjekt selbst ausgeführt wird.
Das Entwurfsmuster Command Processor [Sta11] entspricht in etwa der in Kapitel
4.10.5 unter Punkt 2 genannten Variante des Befehlsmusters. Der Command Pro-
cessor hat gegenüber dem Aufrufer im einfachen Befehlsmuster eine erweiterte Auf-
gabe: er verwaltet Befehlsobjekte und koordiniert deren Ausführung.
Das Entwurfsmuster Active Object [Sch00] stellt ebenfalls eine Erweiterung des Be-
fehlsmusters dar. Im Entwurfsmuster Active Object werden Befehle in einem eigenen
Thread ausgeführt.
Search WWH ::




Custom Search