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

Abstract Factory - сімейства об'єктів

Патерн Abstract Factory створює сім'ї пов'язаних об'єктів без прив'язки до конкретних класів. Він корисний, коли потрібно підтримувати кілька конфігурацій або провайдерів, які мають узгоджуватись між собою (наприклад, пошта і нотифікації одного хмарного провайдера).

Клієнт працює з єдиним набором інтерфейсів і не знає, яка саме реалізація використовується. Заміна всієї сім'ї реалізацій відбувається прозоро - достатньо підставити іншу фабрику.

У Laravel роль абстрактної фабрики часто виконує сервіс-контейнер разом із менеджерами драйверів (Cache, Queue, Mail): метод driver() повертає узгоджену реалізацію за конфігом. Власна Abstract Factory виправдана, коли об'єкти мусять бути сумісні між собою, а не просто взаємозамінні поодинці.

Коли НЕ варто: якщо потрібна заміна лише одного об'єкта (а не цілої сім'ї) - достатньо простішого Factory Method або звичайного зв'язування в контейнері.

interface Mailer
{
  public function send(string $to, string $body): void;
}

interface Notifier
{
  public function notify(string $userId, string $message): void;
}

interface ServicesFactory
{
  public function mailer(): Mailer;
  public function notifier(): Notifier;
}

class SesMailer implements Mailer
{
  public function send(string $to, string $body): void
  {
    // SES send
  }
}

class SesNotifier implements Notifier
{
  public function notify(string $userId, string $message): void
  {
    // SES notify
  }
}

class SesFactory implements ServicesFactory
{
  public function mailer(): Mailer
  {
    return new SesMailer();
  }

  public function notifier(): Notifier
  {
    return new SesNotifier();
  }
}

class NotificationService
{
  public function __construct(private ServicesFactory $factory) {}

  public function run(): void
  {
    $this->factory->mailer()->send('a@b.com', 'Hello');
    $this->factory->notifier()->notify('user1', 'Hi');
  }
}

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

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

1 / 6

Коментарі

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

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

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

Посібники 13 червня 2026
Патерни проєктування

Singleton - один екземпляр

Патерн Singleton гарантує один екземпляр класу на весь застосунок. У Laravel замість класичного Singleton зі static-властивістю та приватним конструктором використовують контейнерний singleton: app()->singleton(...). Контейнер створює об'єкт один раз і повертає той самий екземпляр на всі залежно

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

Яремчук І.П., ФОП
Full-time Сьогодні

Web-програміст (Fullstack, Laravel, Vue.Js)

Яремчук І.П., ФОП Віддалено За результатами співбесіди

Потрібен Fulstack developer. Ми спеціалізуємося на розробці веб-сайтів, CRM/ERP систем та інших програмних рішень для клієнтів з України, Європи та США. Ми пропонуємо вам можливість працювати віддалено з будь-якої точки світу, в команді професіоналів з багаторічним досвідом. Ви будете відповідати за розробку та підтримку веб-додатків, участь у проектуванні архітектури, взаємодію з клієнтами та іншими членами команди. Вимоги: Досвід роботи на позиції Fullstack Developer від 3 років Практичний досвід роботи з PHP, Larave, Filament Знання JavaScript (ES6+), HTML, CSS Досвід роботи з Vue Досвід роботи з базами даних (SQL або NoSQL) Розуміння принципів роботи RESTful API Активне використання АІ в розробці Вміння працювати в команді та готовність вчитися новому Якщо ви готові приєднатися до нашої команди та прийняти виклик розробки високоякісних програмних продуктів, надсилайте свої резюме. Ми готові розглянути кандидатів без вищої освіти, головне — ваш досвід та вміння.

Хартія, 13-та БрОП НГУ
Full-time Сьогодні

Backend Developer (PHP, Laravel), розробник систем цифрової логістики

Хартія, 13-та БрОП НГУ Віддалено ₴25,000 - ₴75,000

SENIOR FULL-STACK РОЗРОБНИК СИСТЕМ ЦИФРОВОЇ ЛОГІСТИКИ Ми шукаємо Backend Developer Для нас важливіше не те, чи ти працював саме з «ідеальним» набором технологій, а те, чи вмієш ти мислити як інженер, розбиратися в задачах, брати відповідальність за результат і рости разом. Стек можна опанувати,ми допоможемо з онбордингом, контекстом і підтримкою команди. Обов’язки розробляти та покращувати backend-частину продукту створювати інтеграції між сервісами працювати з даними, бізнес-логікою та внутрішніми процесами брати участь в обговоренні рішень разом із командою продукту, дизайну та інженерії покращувати стабільність, продуктивність і **надійність сервісів занурюватися в домен і впливати на те, як продукт розвивається далі Вимоги маєш від 2 років комерційного досвіду в backend-розробці добре розумієш принципи веброзробки, роботу з базами даних, Git вмієш писати чистий, зрозумілий код і не боїшся рефакторингу можеш самостійно розібратися в задачі, поставити уточнювальні запитання й довести її до результату Буде плюсом досвід із сучасним backend-стеком (наприклад: Node.js / TypeScript, PHP / Laravel, Python, Go, Java тощо) досвід роботи з SQL/NoSQL, Docker, CI/CD, тестуванням розуміння, як будуються масштабовані та надійні системи **Надсилайте свої резюме або телефонуйте на офіційний номер 3333 для призначення співбесіди.

СУ
Full-time Вчора

Tech Lead PHP (Laravel, E-commerce)

Сузір'я, ГК Віддалено За результатами співбесіди

Ми — група компаній, що працює у сфері виробництва, дистрибуції та ритейлу, і шукаємо сильного Tech Lead PHP (Laravel) до команди розробників. Ви відіграватимете ключову роль у формуванні нашого технологічного бачення та розробці архітектури внутрішніх проєктів. Основний стек розробки: Laravel (PHP), MySQL/PostgreSQL, Nginx, Redis, Docker, RabbitMQ. Формат роботи: повна зайнятість, можливість працювати віддалено. Ми очікуємо: Досвід роботи в ролі Tech Lead/Team Lead PHP (Laravel) — не менше 2 років; Досвід роботи з PHP-фреймворком Laravel — не менше 5 років (можливий комбінований досвід, але частка Laravel має бути більшою); Розуміння та практичні навички застосування принципів ООП, патернів проєктування, DRY, SOLID тощо; Успішний досвід побудови проєктів на мікросервісній архітектурі; Знання SQL і досвід роботи з MySQL та PostgreSQL; Досвід побудови високонавантажених сервісів, проєктування та оптимізації баз даних; Досвід роботи з REST API (побудова архітектури сервісів і інтеграція зі сторонніми сервісами); Досвід роботи з Git; Знання frontend-фреймворків; Досвід роботи з E-commerce є обов’язковий ; Досвід роботи з чергами (Redis). Інфраструктура та DevOps: — Контейнеризація застосунків у Docker (multi-stage builds, docker-compose, оптимізація образів), уніфікація dev/staging/prod-середовищ. — Деплой і експлуатація на AWS: EC2, RDS (MySQL/PostgreSQL), S3, ElastiCache (Redis), ELB/ALB, CloudWatch. — Налаштування CI/CD-пайплайнів, zero-downtime деплої. — Проєктування та підтримка інфраструктури під високонавантажені e-commerce-сервіси на мікросервісній архітектурі. Основна мета ролі: Активна участь у повному циклі розробки: від проєктування (архітектури загалом, окремих модулів, баз даних, REST API) до запуску та подальшого розвитку продукту; Доопрацювання та вдосконалення поточних проєктів; Активна участь в імплементації нових продуктових рішень і розробка для них архітектури; Контроль якості коду команди, допомога в усуненні несправностей за потреби, обговорення варіантів вирішення задач; Роль не передбачає менеджменту задач команди — функція планування та контролю виконання закріплена за Project Manager. Водночас техлід бере активну участь у оцінці складності, ризиків та трудомісткості задач під час планування робіт.

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

Bagisto

bagisto/bagisto

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

27,248 v2.4.6 12 1

Lang

laravel-lang/lang

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

7,777 15.31.4 1

Про статтю

Категорія
Посібники
Опубліковано
01 червня 2026
Час читання
1 хв
4

Поділитись