Паттерн "Фабрика" (Factory Method) — это порождающий паттерн проектирования, который предоставляет интерфейс для создания объектов в суперклассе, но делегирует создание объектов на подклассы. Это позволяет подклассам решать, какой класс будет создан.
Основные компоненты паттерна:
- Интерфейс/Абстрактный класс продукта (Product): Определяет интерфейс объектов, создаваемых фабричным методом.
php
- Конкретные продукты (Concrete Products): Реализуют интерфейс продукта.
php
- Интерфейс/Абстрактный класс создателя (Creator): Объявляет фабричный метод, который возвращает объект продукта. Может также содержать код, который использует продукт, возвращаемый фабричным методом.
php
- Конкретные создатели (Concrete Creators): Переопределяют фабричный метод для возврата определенного экземпляра конкретного продукта.
php
Принцип работы: Клиентский код работает с абстрактным создателем, вызывая его методы, которые, в свою очередь, используют фабричный метод для получения экземпляра нужного продукта. При этом клиент не знает, какой конкретный продукт создан.
Преимущества:
- Гибкость: Позволяет добавлять новые типы продуктов без изменения клиентского кода.
- Отделение ответственности: Разделяет код создания объектов от кода, использующего эти объекты.
- Расширяемость: Упрощает расширение системы новыми типами объектов.
Сценарии использования:
- Когда класс не может заранее предсказать тип объектов, которые он должен создать.
- Когда подклассы должны определять, какие объекты создавать.
- Когда необходимо предоставить возможность создания семейств связанных объектов.
Пример использования:
php