Command

Aus php bar

Wechseln zu: Navigation, Suche

Ein Objekt speichert Instanzen von Objekten die alle die Schnittstelle Command implementieren.


 class Cmd_Macro
 {
   private $_commands = array();
 
   public function add(Cmd_ICommand $c)
   {
         $this->_commands[] = $c;
   }
 
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.


 class Hello implements Cmd_ICommand 
 {
         public function execute() 
         {
                 echo "Hello ";
         }
 };
 
 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
Persönliche Werkzeuge