Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке патерн Factory Method?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Factory Method (Фабричний метод)** - це породжувальний патерн проєктування, який визначає інтерфейс для створення об'єктів, але дозволяє підкласам вирішувати, який саме клас інстанціювати. **Ключове:** Factory Method відокремлює логіку створення об'єкта від логіки його використання, що дає змогу додавати нові типи продуктів без зміни клієнтського коду.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Factory Method (Фабричний метод)** - це **породжувальний патерн проєктування**, який визначає **інтерфейс для створення об'єктів**, але дозволяє **підкласам вирішувати**, який саме клас інстанціювати. Тобто він **делегує створення об'єктів** дочірнім класам, звільняючи основний код від прив'язки до конкретних типів. --- ### Навіщо потрібен Без фабричного методу код часто напряму створює об'єкти через `new`, що робить систему негнучкою і важкою для розширення. Factory Method відокремлює **логіку створення** від **логіки використання**, що дозволяє додавати нові типи продуктів без зміни клієнтського коду. --- ### Структура 1. **Product (Продукт)** - загальний інтерфейс для всіх створюваних об'єктів. 2. **ConcreteProduct** - конкретні реалізації продукту. 3. **Creator (Творець)** - оголошує фабричний метод, який повертає об'єкт `Product`. 4. **ConcreteCreator** - перевизначає фабричний метод, створюючи потрібний тип продукту. --- ### Приклад (Java) ```java // Продукт interface Transport { void deliver(); } // Конкретні продукти class Truck implements Transport { public void deliver() { System.out.println("Доставка суходолом"); } } class Ship implements Transport { public void deliver() { System.out.println("Доставка морем"); } } // Творець abstract class Logistics { abstract Transport createTransport(); public void planDelivery() { Transport t = createTransport(); t.deliver(); } } // Конкретні творці class RoadLogistics extends Logistics { Transport createTransport() { return new Truck(); } } class SeaLogistics extends Logistics { Transport createTransport() { return new Ship(); } } ``` --- ### Переваги - Звільняє код від жорсткої залежності від конкретних класів. - Спрощує розширення: можна додавати нові типи продуктів без зміни клієнтського коду. - Підвищує тестованість і гнучкість. --- ### Недоліки - Збільшує кількість класів у проєкті. - Вимагає успадкування, що не завжди зручно. --- **Підсумок:** Factory Method - це спосіб **перенести створення об'єктів із коду клієнта в підкласи**, зберігши гнучкість і розширюваність архітектури.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.