Wzorce projektowe – Command

Założenie: Zrozumieć i zaimplementować wzorzec projektowy Command w PHP, aby enkapsulować żądanie jako obiekt.

Krok po kroku:

  1. Stworzenie interfejsu Command: Definiujemy interfejs, który będzie musiała implementować każda komenda.
  2. 
    interface Command {
      public function execute();
    }
    				

    Ten interfejs definiuje metodę execute(), która będzie zawierała logikę wykonania komendy.

  3. Implementacja konkretnych komend: Tworzymy klasy implementujące interfejs Command. Każda klasa reprezentuje konkretne żądanie.
  4. 
    class TurnOnLight implements Command {
      public function execute() {
        echo "Światło włączone!\n";
      }
    }
    
    class TurnOffLight implements Command {
      public function execute() {
        echo "Światło wyłączone!\n";
      }
    }
    				

    Klasy TurnOnLight i TurnOffLight implementują interfejs Command i definiują swoją własną logikę w metodzie execute().

  5. Klasa Inwoker: Tworzymy klasę, która będzie odpowiedzialna za wywoływanie komend.
  6. 
    class Invoker {
      private $command;
    
      public function setCommand(Command $command) {
        $this->command = $command;
      }
    
      public function executeCommand() {
        $this->command->execute();
      }
    }
    				

    Klasa Invoker przechowuje referencję do obiektu Command i wywołuje jego metodę execute().

  7. Użycie: Teraz możemy użyć stworzonych klas.
  8. 
    $invoker = new Invoker();
    $turnOn = new TurnOnLight();
    $turnOff = new TurnOffLight();
    
    $invoker->setCommand($turnOn);
    $invoker->executeCommand(); // Wyświetli: Światło włączone!
    
    $invoker->setCommand($turnOff);
    $invoker->executeCommand(); // Wyświetli: Światło wyłączone!
    				

    Ten kod demonstruje, jak używać wzorca Command do wywoływania różnych akcji.

Ten przykład prezentuje podstawy wzorca projektowego Command w PHP. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z bardziej zaawansowanymi zastosowaniami tego wzorca.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *