1 / 9

Command Pattern

Command Pattern. Karola Schäuble, 13015. Wozu eigentlich?. Beispiel Textverarbeitung viele Funktionen können von unterschiedlichen Stellen aus aufgerufen werden, z.B. - Menüeintrag - Button - Popup-Menü bei Rechtsklick - Tastaturkürzel

melva
Télécharger la présentation

Command Pattern

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Command Pattern Karola Schäuble, 13015

  2. Wozu eigentlich? • Beispiel Textverarbeitung • viele Funktionen können von unterschiedlichen Stellen aus aufgerufen werden, z.B. • - Menüeintrag • - Button • - Popup-Menü bei Rechtsklick • - Tastaturkürzel • Soll jedesmal die Funktion dahinter implementiert werden?

  3. Beispiel Textverarbeitung • Befehle sollen rückgängig gemacht werden können • oder sie sollen erneut ausgeführt werden Wie kann man das speichern, wenn die Operationen eng mit den Objekten die sie aufrufen verbunden sind?

  4. Lösung • Den Befehl in einem Objekt kapseln! • Ein und derselbe Befehl kann von meheren Objekten aus aufgerufen werden. • Die Befehlsobjekte können in einer Befehlsgeschichte gespeichert werden.

  5. Einfache Struktur Die abstrakte Klasse Command definiert die Schnittstelle, über die der Invoker auf jede konkrete Befehlsklasse zugreifen kann.

  6. Erklärung • Der Client (Anwendung) erzeugt ein ConcreteCommand-Objekt und weist ihm den Receiver zu. • Der Invoker befiehlt seinem gespeicherten Befehlsobjekt eine Anfrage auszuführen. • ConcreteCommand implementiert die execute()-Methode der Klasse Command und ruft darüber seinen Receiver auf. • Der Receiver führt nun die entsprechenden Operationen aus.  Entkopplung von Aufrufer und Empfänger eines Befehls!

  7. Vom Invoker zum ConcreteCommand Beispiel Menü • beim Hinzufügen der Menüeinträge wird eine add()-Methode aufgerufen - allgemein: add(String, Command) - speziell: add(„NameMenueEintrag“, KonkreterBefehl) Der Name des Menüeintrags und der dazugehörige Befehl werden dann in einer Tabelle abgelegt.

  8. Code Beispiel abstract class Command { abstract public void execute(); } class ConcreteCommand extends Command { public ConcreteCommand() { ... } public void execute() { ... } }

  9. Rückgängig • Um noch die Möglickeit des Rückgängigmachens hinzuzufügen, bekommt die Klasse Command noch eine undo()-Methode. • Der Zustand des Receivers wird nun im Befehlsobjekt gespeichert, bevor der Befehl ausgeführt wird und kann über undo() wiederhergestellt werden. • Es braucht desweiteren noch einen CommandManager, der die Befehlsobjekte in einer Liste speichert und gegebenenfalls dessen undo()-Methode aufruft.

More Related