Фабричный метод

Фабричный метод

Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.


Пример реализации паттерна "Фабричный метод" на PHP


Абстрактный класс Logistics

abstract class Logistics
{

  public function delivery()  
  {  
    $transport = $this->createTransport(); 
    return $transport->deliver();      
  }
  
  /**  
  * @return Transport  
  */  
  abstract public function createTransport(): Transport;
  
}


Подкласс RoadLogistics

class RoadLogistics extends Logistics
{

    /**
     * @return Transport
     */
    public function createTransport(): Transport
    {
        return new Truck();
    }

}


Подкласс SeaLogistics

class SeaLogistics extends Logistics
{

    /**
     * @return Transport
     */
    public function createTransport(): Transport
    {
        return new Ship();
    }

}


Интерфейс Transport

interface Transport
{

    /**
     * @return string
     */
    public function deliver(): string;

}


Класс Truck доставки по дороге на грузовике

class Truck implements Transport
{

    /**
     * @return string
     */
    public function deliver(): string
    {
        return 'Delivery by truck';
    }

}


Класс Ship доставки по морю на корабле

class Ship implements Transport
{

    /**
     * @return string
     */
    public function deliver(): string
    {
        return 'Delivery by ship';
    }

}