Фабричний метод — це породжуючий патерн проектування, який вирішує проблему створення різних продуктів, без прив’язки коду до конкретних класів продуктів.
Фабричний метод задає метод, який необхідно використовувати замість виклику оператора new для створення об’єктів-продуктів. Підкласи можуть перевизначити цей метод, щоб змінювати тип створюваних продуктів.
Якщо ви вже чули про Фабрику, Фабричний метод чи Абстрактну фабрику, але вам все одно важко їх розрізняти, то прочитайте нашу статтю Порівняння фабрик.
Ознаки застосування патерна: Фабричний метод можна визначити за створюючими методами, які повертають об’єкти продуктів через абстрактні типи або інтерфейси. Це дозволяє змінювати типи створюваних продуктів у підкласах.
Виробництво крос-платформних елементів GUI
В цьому прикладі в ролі продуктів виступають кнопки, а в ролі творця — діалог.
Різним типам діалогів відповідають свої власні типи елементів. Тому для кожного типу діалогу ми створюємо свій підклас і перевизначати в ньому фабричний метод.
Кожен конкретний діалог буде породжувати ті кнопки, які до нього підходять. При цьому базовий код діалогів не зламається, так як він працює з продуктами тільки через їх загальний інтерфейс.
buttons
buttons/Button.java: Загальний інтерфейс кнопок
buttons/HtmlButton.java: Конкретний клас кнопок
buttons/WindowsButton.java: Ще один клас кнопок
factory
factory/Dialog.java: Базовий діалог
factory/HtmlDialog.java: Конкретний клас діалогів
factory/WindowsDialog.java: Ще один клас діалогів
Demo.java: Клієнтський код
OutputDemo.txt: Результат з фабрикою HtmlDialog
OutputDemo.png: Результат з фабрикою WindowsDialog