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:
- Definicja interfejsu: Zdefiniujmy interfejs
FlyBehavior
, który będzie określał metodę latania. - Implementacja interfejsu: Stwórzmy dwie klasy implementujące
FlyBehavior
:FlyWithWings
iFlyNoWay
. - Klasa używająca interfejsu: Stwórzmy klasę
Duck
, która będzie korzystać z interfejsuFlyBehavior
. - Użycie: Utwórzmy obiekty i przetestujmy:
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ę.
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ć.
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.
$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!