Wzorce projektowe – Strategy
Założenie: Zrozumieć i zaimplementować wzorzec projektowy Strategy w PHP, aby móc dynamicznie zmieniać algorytmy.
Krok po kroku:
- Stworzenie interfejsu dla strategii: Definiujemy interfejs, który będą implementowały konkretne strategie.
interface PaymentStrategy { public function pay(float $amount): bool; }
Ten kod definiuje interfejs `PaymentStrategy` z metodą `pay`, która przyjmuje kwotę do zapłaty i zwraca wartość logiczną wskazującą na sukces płatności.
- Implementacja konkretnych strategii: Tworzymy klasy implementujące interfejs `PaymentStrategy` dla różnych metod płatności.
class PayPalStrategy implements PaymentStrategy { public function pay(float $amount): bool { // Logika płatności przez PayPal echo "Płatność przez PayPal: " . $amount . " zł\n"; return true; // Symulacja udanej płatności } } class CreditCardStrategy implements PaymentStrategy { public function pay(float $amount): bool { // Logika płatności kartą kredytową echo "Płatność kartą kredytową: " . $amount . " zł\n"; return true; // Symulacja udanej płatności } }
Te klasy implementują interfejs `PaymentStrategy`, każda z nich realizując płatność w inny sposób.
- Klasa kontekstowa: Tworzymy klasę, która będzie korzystać z wybranych strategii.
class Order { private PaymentStrategy $strategy; public function __construct(PaymentStrategy $strategy) { $this->strategy = $strategy; } public function processPayment(float $amount): bool { return $this->strategy->pay($amount); } }
Klasa `Order` przechowuje instancję strategii i używa jej do przetworzenia płatności.
- Użycie strategii: Wybieramy i używamy odpowiedniej strategii.
$order1 = new Order(new PayPalStrategy()); $order1->processPayment(100.0); $order2 = new Order(new CreditCardStrategy()); $order2->processPayment(50.0);
W tym przykładzie tworzymy dwa zamówienia, każde z inną strategią płatności.
Ten przykład pokazuje podstawowe zastosowanie wzorca Strategy. Umożliwia on łatwe dodawanie nowych metod płatności bez modyfikacji klasy `Order`.
Zachęcamy do dalszego zgłębiania tematu wzorców projektowych w PHP!