Interfejsy a wzorce projektowe

Założenie: Zrozumieć, jak deklarować i implementować interfejsy w PHP oraz zobaczyć ich zastosowanie w prostym przykładzie wzorca Strategy.

Krok po kroku:

  1. Definicja interfejsu: Zdefiniujmy interfejs FlyBehavior, który będzie określał metodę latania.
  2. 
    interface FlyBehavior {
      public function fly();
    }
    				

    Ten kod definiuje interfejs z jedną metodą fly(). Klasy implementujące ten interfejs będą musiały zaimplementować tę metodę.

  3. Implementacja interfejsu: Stwórzmy dwie klasy implementujące FlyBehavior: FlyWithWings i FlyNoWay.
  4. 
    class FlyWithWings implements FlyBehavior {
      public function fly() {
        echo "Lecę z skrzydłami!
    "; } } class FlyNoWay implements FlyBehavior { public function fly() { echo "Nie umiem latać!
    "; } }

    FlyWithWings wypisuje komunikat o lataniu, a FlyNoWay informuje, że nie potrafi latać.

  5. Klasa używająca interfejsu: Stwórzmy klasę Duck, która będzie korzystać z interfejsu FlyBehavior.
  6. 
    class Duck {
      public FlyBehavior $flyBehavior;
    
      public function __construct(FlyBehavior $flyBehavior) {
        $this->flyBehavior = $flyBehavior;
      }
    
      public function performFly() {
        $this->flyBehavior->fly();
      }
    }
    				

    Klasa Duck posiada właściwość flyBehavior, która przechowuje obiekt implementujący FlyBehavior. Metoda performFly() wywołuje metodę fly() tego obiektu.

  7. Użycie: Utwórzmy obiekty i przetestujmy:
  8. 
    $duckWithWings = new Duck(new FlyWithWings());
    $duckWithWings->performFly(); // Wyświetli: Lecę z skrzydłami!
    
    $duckNoWay = new Duck(new FlyNoWay());
    $duckNoWay->performFly(); // Wyświetli: Nie umiem latać!
    				

    Ten kod pokazuje, jak łatwo zmienić zachowanie kaczki, zmieniając tylko obiekt implementujący interfejs FlyBehavior.

Ten przykład pokazuje podstawowe zastosowanie interfejsów w PHP, w kontekście wzorca Strategy. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi wzorcami projektowymi!

Dodaj komentarz 0

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