Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас
Посібники 07 червня 2026

Factory Method - вибір створення

Factory Method переносить рішення про створення конкретного об'єкта у підкласи. Базовий клас задає загальний алгоритм, а який саме об'єкт створити - вирішує нащадок.

Яку проблему вирішує

Частина алгоритму стабільна й однакова для всіх випадків, але конкретний продукт залежить від контексту чи типу. Якщо вшити вибір прямо в базовий клас через if/switch, кожен новий тип потребуватиме правок цього класу - порушення принципу відкритості/закритості.

Як вирішує

Базовий клас викликає абстрактний фабричний метод, не знаючи, що саме той поверне. Нащадок перевизначає метод і створює потрібний продукт. Загальний алгоритм лишається в одному місці, а розширення відбувається додаванням нового підкласу, без змін наявного коду.

interface ReportContract
{
  public function render(): array;
}

abstract class ReportCreator
{
  public function handle(): array
  {
    $report = $this->makeReport();
    return $report->render();
  }

  abstract protected function makeReport(): ReportContract;
}

class SalesReport implements ReportContract
{
  public function render(): array
  {
    return ['sales' => 1000];
  }
}

class SalesReportCreator extends ReportCreator
{
  protected function makeReport(): ReportContract
  {
    return new SalesReport();
  }
}

Де застосовувати

  • Стабільний каркас алгоритму з варіативним кроком створення об'єкта.
  • На відміну від Abstract Factory (сім'я узгоджених об'єктів), Factory Method відповідає за створення одного продукту.
  • У Laravel схожу роль грають контейнерні біндінги та Model::factory() для тестових даних.

Плюси та мінуси

  • + Винесення створення в підкласи дотримується принципу відкритості/закритості.
  • + Загальний алгоритм не дублюється між варіантами.
  • Породжує ієрархію підкласів - по одному на кожен продукт.
  • Надлишковий, якщо вибір реалізації простий і не змінюється; тоді достатньо match чи конфіга.
25

Ця стаття - частина серії

Патерни проєктування

3 / 21

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Вакансії за темою

BINTIME Нова
2 дн. тому

Middle Full Stack Developer (PHP/React)

Middle Full Stack розробник для платформи e-commerce на мікросервісах. 70% PHP (Laravel/Symfony, REST APIs, MySQL/PostgreSQL, Redis), 30% React та Blade шаблони. Потрібно 3+ років досвіду з PHP 8.x, Docker, Git, готовність працювати з AI-інструментами (Claude Code, Cursor, Copilot). Можливість розвитку в AI-інженерингу на production-фічах.

SushiBang Нова
2 дн. тому

Middle Laravel / Filament Developer

Розробка та підтримка кастомної CRM-системи для доставки з використанням Laravel 12, Filament 5 та Livewire. Спеціаліст займатиметься проектуванням бази даних, розробкою модулів прийому/обробки замовлень, інтеграцією через REST API та оптимізацією. Вимагається глибоке розуміння Laravel, Filament та PostgreSQL, досвід з Livewire та SQL-оптимізацією. Важливі автономність і відповідальність.

PulsePaw
3 дн. тому

Junior Strong/Middle PHP developer

Розробник PHP/Laravel для фінтех-проекту на мікросервісній архітектурі. Відповідатиме за підтримку та покращення кодової бази, оптимізацію продуктивності, роботу з MySQL, Redis, черг. Потрібні 2+ роки комерційної розробки, 1+ років PHP (Laravel), розуміння OOP та SOLID, мінімальні знання HTML/CSS/JS.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

27,884 v2.4.8 12 15

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,775 15.33.2 8

Відео за темою