Factory — патерн, що інкапсулює логіку створення об'єктів. Замість new ConcreteClass() скрізь у коді — виклик фабрики, яка сама вирішує, який саме клас інстанціювати. Клієнтський код не знає, як створюється об'єкт.
Варіанти
Simple Factory — статичний метод, що повертає потрібний об'єкт на основі параметра
Factory Method — базовий клас визначає інтерфейс для створення, підкласи перевизначають конкретну реалізацію
Abstract Factory — фабрика фабрик: створює сімейства пов'язаних об'єктів
Коли корисний
Тип об'єкта залежить від runtime-умов або конфігурації
Потрібно ізолювати складну логіку ініціалізації в одному місці
Легко замінити реалізацію без змін у клієнтському коді