Command Pattern

Command Pattern

Das Kommando oder der Befehl (engl. Command) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört als eines der GoF-Muster zu der Kategorie der Verhaltensmuster (Behavioral Patterns).

Es dient zum Kapseln von Anfragen als Kommando-Objekte, um damit Empfänger zu parametrisieren. Anfragen können dabei in Warteschlangen gestellt, aufgezeichnet und später ggf. auch wieder rückgängig gemacht werden.

Auch bekannt als: Aktion, Transaktion (Action, Transaction)

Inhaltsverzeichnis

Verwendung

Das Kommando wird verwendet, wenn Objekte mit einer auszuführenden Aktion parametrisiert werden sollen, beispielsweise wenn eine Schaltfläche in einer GUI mit einer Aktion verknüpft werden soll. Das ist die objektorientierte Entsprechung zu Rückruffunktionen (callback function).

Das Erstellen des Befehls und das tatsächliche Ausführen finden zu verschiedenen Zeiten oder in einem anderen Kontext (Thread, Prozess, Rechner) statt.

Implementation eines Rückgängig-Mechanismus (Undo). Bei jeder Ausführung werden die zur Umkehrung nötigen Daten im Objekt gespeichert und das Objekt selber auf einem Stapel gesichert. Um das Gegenteil Wiederherstellen (Redo) zu implementieren, genügt ein zweiter Stapel für die rückgängig gemachten Befehle.

UML-Diagramm

Klassendiagramm

Akteure

Der Befehl ist die Basisklasse aller Befehle und definiert die Schnittstelle zum Ausführen des Befehls. Ein Konkreter Befehl speichert den zum Ausführen nötigen Zustand, darunter typischerweise auch einen Verweis auf den Empfänger und implementiert die Befehlsschnittstelle.

Der Klient erzeugt einen konkreten Befehl und versieht ihn mit einem Verweis auf den Empfänger und allen anderen nötigen Informationen. Er gibt dem Aufrufer eine Referenz auf den konkreten Befehl.

Der Aufrufer besitzt einen oder mehrere Verweise auf Befehle und fordert diese bei Bedarf auf, ihre Aktion auszuführen. An den Empfänger werden keine besonderen Anforderungen gestellt. Er muss nichts über die anderen Akteure wissen. Somit kann jede Klasse als Empfänger dienen. Der konkrete Befehl ruft Methoden des Empfängerobjektes auf, um seine Aktion auszuführen.

Vorteile

Auslösender und Ausführender sind entkoppelt. Befehlsobjekte können wie andere Objekte auch manipuliert werden. (Verändern, Filtern, Zwischenspeichern, ... ). Befehlsobjekte können zu komplexen Befehlen kombiniert werden (Makros, realisiert als Kompositum).

Nachteile

Es wird für jedes Kommando eine neue Klasse benötigt. Dies kann sehr schnell zu einer großen Menge von Klassen führen.

Beispiel

Ein gutes Beispiel für das Befehlsmuster, ist die Verknüpfung von GUI-Elementen, wie Schaltflächen oder Menüpunkten, mit den entsprechenden Aktionen:

  • Konkrete Befehle realisieren dann Aktionen wie Datei öffnen, Rückgängig oder Schreibmarke nach rechts
  • Klienten sind die Applikation oder Dialoge.
  • Aufrufer sind Schaltflächen, Menüpunkte oder Hotkeys.
  • Empfänger sind die Applikation (Datei öffnen) oder das Dokument (Rückgängig, Einfügemarke nach rechts)

Verwandte Entwurfsmuster

Makrobefehle können als Kompositum implementiert werden.

Das Memento-Entwurfsmuster kann die Objektzustände speichern.


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Command pattern — In object oriented programming, the command pattern is a design pattern in which an object is used to represent and encapsulate all the information needed to call a method at a later time. This information includes the method name, the object… …   Wikipedia

  • Command — may refer to: Command (computing), a statement in a computer language COMMAND.COM, the default operating system shell and command line interpreter for DOS Command (military formation), an organizational unit Command key, a modifier key on Apple… …   Wikipedia

  • Command (patrón de diseño) — En programación orientada a objetos, Command es un patrón de diseño. Contenido 1 Intención 2 Propósito 3 Motivo 4 Aplicaciones …   Wikipedia Español

  • Command queue — A command queue is a queue for delaying the execution of commands, usually either in order of priority or on a first in first out basis.[1] They are often useful in synchronous applications, where a command executor may receive a new command… …   Wikipedia

  • Command-query separation — (CQS) is a principle of imperative computer programming. It was devised by Bertrand Meyer as part of his pioneering work on the Eiffel programming language. It states that every method should either be a command that performs an action, or a… …   Wikipedia

  • Command neuron — A command neuron is a single neuron (or small set of neurons) whose stimulation results in the evocation of an endogenous, specific, naturally occurring behavior pattern (Carew, 2000). Command neurons act as neural decision making cells; push… …   Wikipedia

  • Pattern — A pattern, from the French patron, is a theme of recurring events or objects, sometimes referred to as elements of a set. These elements repeat in a predictable manner. It can be a template or model which can be used to generate things or parts… …   Wikipedia

  • Pattern 1796 light cavalry sabre — The Pattern 1796 Light Cavalry Sabre, is a sword that was used primarily by British Light Dragoons and hussars, and Kings German Legion light cavalry during the Napoleonic Wars. It was adopted by the Prussians (as the 1811 pattern or Blücher… …   Wikipedia

  • Behavioral pattern — In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication.… …   Wikipedia

  • Design Pattern — Patron de conception Pour les articles homonymes, voir Patron. Un patron de conception (design pattern en anglais) est un concept de génie logiciel destiné à résoudre les problèmes récurrents suivant le paradigme objet. En français on utilise… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”