Проста Фабрика (Simple Factory)
Аналогія
Допустимо, ви будуєте будинок і вам потрібні двері. Буде бардак, якщо кожен раз, коли вам потрібні двері, ви станете озброюватися інструментами і робити їх на будмайданчику. Натомість ви замовите двері на фабриці.
Коротко
Проста фабрика просто генерує екземпляр для клієнта без надання будь-якої логіки екземпляра.
Вікіпедія
У об'єктно орієнтованому програмуванні фабрикою називається об'єкт, який створює інші об'єкти. Формально фабрика — це функція або метод, що повертає об'єкти різних прототипів або класів із якогось методу, який вважається новим.
Приклад
Для початку нам потрібен інтерфейс дверей та його реалізація.
interface Door
{
public function getWidth(): float;
public function getHeight(): float;
}
class WoodenDoor implements Door
{
protected $width;
protected $height;
public function __construct(float $width, float $height)
{
$this->width = $width;
$this->height = $height;
}
public function getWidth(): float
{
return $this->width;
}
public function getHeight(): float
{
return $this->height;
}
}
Тепер спорудимо фабрику дверей, яка створює та повертає нам двері.
class DoorFactory
{
public static function makeDoor($width, $height): Door
{
return new WoodenDoor($width, $height);
}
}
Використання:
$ door = DoorFactory: makeDoor (100, 200);
echo 'Width:'. $door->getWidth();
echo 'Height: '. $door->getHeight();
Коли використовувати?
Коли створення об'єкта має на увазі якусь логіку, а не просто кілька привласнень, то має сенс делегувати завдання виділеній фабриці, а не повторювати всюди один і той самий код.