Фабричный метод — это порождающий паттерн проектирования, который решает проблему создания различных продуктов, без указания конкретных классов продуктов.
Фабричный метод задаёт метод, который следует использовать вместо вызова оператора 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