Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
Пример реализации паттерна "Фабричный метод" на 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';
}
}