$KK(Kapseln der Benutzeraktionen durch Command Pattern) Im obigen Kapitel wird vom Interaktionsobjekt aus, der Befehl zum Erzeugen eines neuen Dokumentes ausgelöst. Der Erzeugen eines neuen Objekts findet in der Funktionskomponente statt $R(Source) IKDokumentListe >> void activateCreateNewDokument(){ funktionskomponente.neuesDokument(). } $R\ Warum einfach wenn es auch kompliziert geht $R(Source) IKDokumentListe >> void activateCreateNewDokument{ this.createNewDokumentCommand().execute(); } IKDokumentListe >> Command createNewDokumentCommand(){ // Erzeuge ein Command Objekt mit der Funktionskomponente als Wert der // Instanzvariable receiver Command commandObjekt := new CreateNewDokumentCommand(). commandObjekt.setReceiver(this.funktionskomponente()); return commandObjekt ; } CreateNewDokumentCommand >> void execute(){ receiver.neuesDokument(); } $R\ Nachteile der komplizierten Version: * schwerer zu verstehen * zusätzlicher Code * langsamer (vernachlässigbar) Vorteile der komplizierten Version: * Benutzeraktionen können gespeichert und protokolliert werden * Hilfreich bei Fehlersuche * Benutzer kann kontrollieren was er zuletzt gemacht hat * Die protokollierten Benutzteraktionen können automatisiert wiederholt werden. Ideal fuer Schulungen * Vereinfacht Undo und Redo * Vereinfacht Bilden von Macros Eine Erweiterung des Command Patterns, ist das Command-Processor Pattern. Es wird u.a. für Undo's verwendet. Bei dem Command-Pattern sind i.a 5 Klassen beteiligt: $B(Bilder,comclass.gif,CRC Karten Command Pattern) Hier das zugehörige Objektmodell: $B(Bilder,comuml.gif,ObjektModell Command Pattern) Beispiel:Der Anwender hat in einem Text ein Wort selektiert, und möchte in dem Wort alle Buchstaben in Grossbuchstaben umwandeln. Im einzelnen passiert folgendes: # Der Controller empfängt in seiner EventLoop den Event Capitalize Selection # Es wird ein Capitalize Command erzeugt # Der Capitalize fragt seinem Supplier (einen Text) nach dem Status und speichert den Status in einer Instanzvariable: ** Welcher Bereich im Text selektiert ist ** Eine Kopie des selektierten Texts # Der erzeugte Capitalize Command wird ausgelöst und im Stack des Command-Processors gespeichert Bei einem Undo werden folgende Aktionen ausgelöst: # Der Controller empfängt den Undo Event # Aus dem CommandProcessor wird vom Stack den zuletzt ausgeführten Command (im Beispiel Capitalize Command) geholt # Im Capitalize Command wird die Funktion Undo ausgelöst # Die Informationen um das Undo erfolgreich zu bewerkstelligen, steht in einer entsprechenden Instanzvariable des Capitalize Command $R(Literatur) [i|System of Pattern>systemPattern] Command Processor $R\