DevLearn logo
Skill Up With Me
Interactive Learning
Signing in…

Абстрактная фабрика

🔒 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