Befehl [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Übersicht


(engl. Pattern command)

Das Entwurfsmuster Befehl gehört zur Klasse der Verhaltensmuster.
Es kapselt einen Befehl als eigenständiges Objekt. Dadurch wird es möglich, einem Klienten unterschiedliche Befehle über die selbe Schnittstelle anzubieten bzw. eine Aktion unabhängig von dessen Aktivierung zu behandeln.

Das Befehlsmuster kann verwendet werden, wenn:

  • Objekte mit einer auszuführenden Aktion parametriert werden sollen.
    Dies ist vergleichbar mit Callback-Funktionen in prozeduralen Sprachen, also Funktionen die irgendwo registriert werden und zu einem späteren Zeitpunkt (z.B. beim Auslösen eines bestimmten Ereignisses) aufgrufen werden.
  • Anfragen zu unterschiedlichen Zeitpunkten zu spezifizieren, aufzureihen und auszuführen sind.
    Ein Befehlsobjekt kann über eine von der ursprünglichen Anfrage unabhängige Lebensdauer verfügen. Wenn der Empfänger einer Anfrage in einer vom Adressraum unabhängigen Weise repräsentiert werden kann, dann kann ein Befehlsobjekt für die Anfrage zu einem anderen Prozess transferiert und die Anfrage dort ausgeführt werden.
  • eine Undo-Funktion, d.h. das Rückgängigmachen von Operationen, unterstützt werden soll.
    Die FuehreAus-Operation einer Befehlsklasse kann den relevanten Zustand für die Umkehr des Befehls im Befehlsobjekt selbst speichern. Die Befehlsklassenschnittstelle muss dann über eine zusätzliche Rückgängig-Operation verfügen, welche die Auswirkungen des vorigen FuehreAus-Aufrufs rückgängig macht. Einmal ausgeführte Befehlsobjekte werden in einer Befehlsgeschichte (Liste) gespeichert. Undo und Redo erreicht man durch Traversieren der Liste vorwärts und rückwärts, wobei man jeweils FuehreAus respektive Rückgängig aufruft.
  • Änderungen mitprotokolliert werden sollen.
    Im Falle eines Absturzes können die bereits vorgenommenen Änderungen somit erneut ausgeführt werden.
    Indem die Befehlsklassenschnittstelle um Operationen zum Laden und Speichern erweitert wird, kann ein persistentes Logbuch der Änderungen angelegt werden. Das System nach einem Absturz wieder herzustellen umfasst dann das Laden von gespeicherten Befehlsobjekten von der Festplatte und ihre erneute Ausführung mittels der FuehreAus-Operation.
  • ein System mittels komplexer Operationen strukturiert werden soll, die aus primitiven Operationen aufgebaut sind.
    Solch eine Struktur kann oft in Informationssystemen gefunden werden, die Transaktionen unterstützen. Eine Transaktion kapselt eine Menge von Datenänderungen. Das Befehlsmuster stellt eine Möglichkeit dar, Transaktionen zu modellieren. Befehlsobjekte besitzen eine gemeinsame Schnittstelle, die es ihnen ermöglicht, alle Transaktionen auf die gleiche Weise aufzurufen.
    Das Muster erleichtert es zudem, das System um neue Transaktionen zu erweitern.
Befehlsobjekte können weiterhin zu sogenannten Makro-Befehlen zusammengesetzt werden. Dadurch wird es möglich eine Abfolge von Befehlen zusammenzufassen und somit genauso wie einen einzelnen Befehl zu behandeln. Die FuehreAus-Operation des Makros besteht dann aus dem Aufruf aller FuehreAus-Operationen der zugeordneten Befehlsobjekte. (siehe Beispiel)

Quelle: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Entwurfsmuster, 1996


[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.03.2005