Абстрактная фабрика
🔒 Sign in to use this
Абстрактная фабрика — это порождающий паттерн, предоставляющий интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. Думайте о нём как о фабрике фабрик — вы выбираете фабрику, и все создаваемые через неё объекты гарантированно совместимы друг с другом.
ℹ️Ключевое отличие от Фабричного метода: Фабричный метод создаёт один продукт; Абстрактная фабрика создаёт целое семейство связанных продуктов. Все продукты одной фабрики спроектированы для совместной работы.
Проблема: семейства UI-компонентов
Вы разрабатываете кроссплатформенный UI-тулкит. У вас есть виджеты Button и Checkbox. Каждая платформа (Windows, macOS, Linux) требует своего внешнего вида. Нужно гарантировать, что если создаётся WindowsButton, то и Checkbox будет Windows — никакого смешения типа WindowsButton + MacCheckbox.
Кликните, чтобы увидеть связи семейства продуктов ▶
GUIFactory
🪟WindowsFactory
🍎MacFactory
🔲WinButton
☑️WinCheckbox
🔘MacButton
✅MacCheckbox
Участники
Кликните на каждого участника, чтобы узнать его роль
🏗️
Abstract Factory
🏭
Concrete Factory
📐
Abstract Product
🎨
Concrete Product
Полный пример кода
java
interface Button {
void render();
void onClick();
}
interface Checkbox {
void render();
void toggle();
}Абстрактная фабрика vs Фабричный метод
Кликните, чтобы сравнить два паттерна
🔧
Фабричный метод
🏗️
Абстрактная фабрика
Абстрактная фабрика в стандартной библиотеке Java
Кликните на выделенные строки, чтобы увидеть паттерн
java
1
// javax.xml.parsers.DocumentBuilderFactory
2
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
▼
3
DocumentBuilder builder = factory.newDocumentBuilder();
▼
4
5
// javax.xml.transform.TransformerFactory — тот же паттерн
6
TransformerFactory tf = TransformerFactory.newInstance();
▼
7
Transformer transformer = tf.newTransformer();
▼
✅Ключевой вывод: Абстрактная фабрика гарантирует совместимость продуктов. Если нужно обеспечить, что создаваемые объекты образуют согласованный набор — кнопки подходят к чекбоксам, а те к скроллбарам — Абстрактная фабрика является правильным инструментом.
⚠️Компромисс: добавление нового типа продукта в семейство (например, Tooltip) требует изменения интерфейса Абстрактной фабрики и ВСЕХ реализаций конкретных фабрик. Тщательно планируйте семейства продуктов заранее.
🔒 Sign in to use this