Код IT
← Каталог

Laravel - MVC-фреймворк и паттерны проектирования — Объекты состояний

Фрагмент из «Laravel - MVC-фреймворк и паттерны проектирования»: Объекты состояний.

PHP main.php
interface OrderState
{
    public function pay(Order $order);
    public function ship(Order $order);
}

class PendingState implements OrderState
{
    public function pay(Order $order)
    {
        $order->setState(new PaidState());
    }

    public function ship(Order $order)
    {
        throw new Exception('Cannot ship unpaid order');
    }
}
interface OrderState
{
    public function pay(Order $order);
    public function ship(Order $order);
}

class PendingState implements OrderState
{
    public function pay(Order $order)
    {
        $order->setState(new PaidState());
    }

    public function ship(Order $order)
    {
        throw new Exception('Cannot ship unpaid order');
    }
}