Объясните основные отличия между паттернами 'Фабричный метод' и 'Абстрактная фабрика'.
Ответ от нейросети
sobes.tech AI
Паттерн Фабричный метод (Factory Method) определяет интерфейс для создания объекта, но позволяет подклассам решать, какой класс инстанцировать. То есть, создание конкретного объекта делегируется подклассам. Обычно используется, когда есть один продукт и несколько вариантов его реализации.
Абстрактная фабрика (Abstract Factory) предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. Это паттерн более высокого уровня, который объединяет несколько фабричных методов для создания разных, но связанных объектов.
Основные отличия:
- Фокус: Фабричный метод создает один продукт, Абстрактная фабрика — семейство продуктов.
- Структура: Фабричный метод обычно реализуется через наследование и переопределение метода создания, Абстрактная фабрика — через композицию и набор интерфейсов.
- Использование: Фабричный метод подходит, когда нужно создавать объекты одного типа с вариациями, Абстрактная фабрика — когда нужно создавать связанные объекты разных типов, которые должны работать вместе.
Пример на Dart (Flutter) для фабричного метода:
abstract class Button {
void render();
}
class AndroidButton implements Button {
@override
void render() => print('Android Button');
}
class IOSButton implements Button {
@override
void render() => print('iOS Button');
}
abstract class Dialog {
Button createButton();
void render() {
var button = createButton();
button.render();
}
}
class AndroidDialog extends Dialog {
@override
Button createButton() => AndroidButton();
}
class IOSDialog extends Dialog {
@override
Button createButton() => IOSButton();
}
Здесь Dialog — фабричный метод, который создает разные кнопки в зависимости от платформы.
Абстрактная фабрика будет включать создание нескольких связанных продуктов, например, кнопок и чекбоксов, которые должны быть совместимы между собой.