Command
Aus php bar
Ein Objekt speichert Instanzen von Objekten die alle die Schnittstelle Command implementieren.
1 class Cmd_Macro 2 { 3 private $_commands = array(); 4 5 public function add(Cmd_ICommand $c) 6 { 7 $this->_commands[] = $c; 8 } 9 10 public function run() 11 { 12 // iterator $it 13 foreach ($this->_commands as $it) { 14 $it->execute(); 15 } 16 } 17 };
Für das Command Pattern wird ein Interface erstellt.
1 interface Cmd_ICommand { 2 public function execute(); 3 // public function undo(); 4 };
Inhaltsverzeichnis |
Anwendung
Durch die Schnittstelle wird eine lose Kopplung der Klassen erreicht und sind somit austauschbar. Um zu erweitern, muss lediglich jede neue Anforderung das Command-Interface implementieren.
Beispiel
Es soll ein erweiterbare Macro oder auch Batch Verarbeitung erstellt werden.
Das Command-Pattern bietet sich z.B. für Installer [PDP] an, die Schnittstelle könnte dazu beispielsweise mit einer undo-Methode erweitert werden.
1 class Hello implements Cmd_ICommand 2 { 3 public function execute() 4 { 5 echo "Hello "; 6 } 7 }; 8 9 class World implements Cmd_ICommand 10 { 11 public function execute() 12 { 13 echo "World!\n"; 14 } 15 }; 16 17 $macro = new Cmd_Macro(); 18 19 $macro->add(new Hello); 20 $macro->add(new World); 21 $macro->run();
Ausgabe
1 Hello World!
Quellen
GoF[235], Thinking In C++ Vol.2 [Chapter 10], [PDP] Stefan Schmidt PHP Design Patterns

