Sobes.tech
Back to questions
Junior — Middle
93

Можете ли вы привести пример наиболее сложного для вас паттерна проектирования, который вы применяли в практике?

Answer from AI

sobes.tech AI

Одним из наиболее сложных паттернов проектирования, с которым мне приходилось работать в PHP, является паттерн "Состояние" (State). Этот паттерн позволяет объекту изменять свое поведение в зависимости от внутреннего состояния, не меняя при этом его класс.

Пример использования: у меня был проект с системой заказов, где заказ мог находиться в разных состояниях (новый, оплачен, отправлен, отменен). Вместо множества условных операторов я реализовал каждое состояние как отдельный класс, реализующий общий интерфейс, и переключал состояние заказа динамически.

interface OrderState {
    public function proceed(OrderContext $order);
}

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // логика перехода в состояние "оплачен"
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // логика перехода в состояние "отправлен"
        $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);
    }
}

// Использование
$order = new OrderContext(new NewOrderState());
$order->proceed(); // переходит в PaidOrderState
$order->proceed(); // переходит в ShippedOrderState

Этот паттерн сложен тем, что требует хорошего понимания принципов ООП и правильного проектирования классов для управления состояниями, но значительно улучшает читаемость и расширяемость кода.