Czy możesz podać przykład najtrudniejszego dla ciebie wzorca projektowego, którego używałeś w praktyce?
sobes.tech AI
Odpowiedź od AI
Jednym z najbardziej skomplikowanych wzorców projektowych, z którymi miałem do czynienia w PHP, jest wzorzec "Stan" (State). Ten wzorzec pozwala obiektowi zmieniać swoje zachowanie w zależności od jego wewnętrznego stanu, nie zmieniając przy tym swojej klasy.
Przykład użycia: miałem projekt z systemem zamówień, gdzie zamówienie mogło znajdować się w różnych stanach (nowe, opłacone, wysłane, anulowane). Zamiast wielu instrukcji warunkowych, zaimplementowałem każdy stan jako osobną klasę, implementującą wspólny interfejs, i dynamicznie zmieniałem stan zamówienia.
interface OrderState {
public function proceed(OrderContext $order);
}
class NewOrderState implements OrderState {
public function proceed(OrderContext $order) {
// logika przejścia do stanu "opłacony"
$order->setState(new PaidOrderState());
}
}
class PaidOrderState implements OrderState {
public function proceed(OrderContext $order) {
// logika przejścia do stanu "wysłane"
$order->setState(new ShippedOrderState());
}
}
class OrderContext {
private $state;
public function __construct(OrderState $state) {
$this->state = $state;
}
public function setState(OrderState $state) {
$this->state = $state;
}
public function proceed() {
$this->state->proceed($this);
}
}
// Użycie
$order = new OrderContext(new NewOrderState());
$order->proceed(); // przechodzi do PaidOrderState
$order->proceed(); // przechodzi do ShippedOrderState
Ten wzorzec jest skomplikowany, ponieważ wymaga dobrej znajomości zasad OOP i poprawnego projektowania klas do zarządzania stanami, ale znacznie poprawia czytelność i rozszerzalność kodu.