Фабричный метод — это порождающий шаблон проектирования, который определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта. Он инкапсулирует логику создания объекта в отдельный метод, который вызывается клиентским кодом. Это позволяет отделить код, использующий объекты, от кода, создающего их.
Ключевые компоненты:
- Creator (Создатель): Объявляет фабричный метод, который возвращает объект Product. Этот класс может иметь реализацию по умолчанию для фабричного метода.
- Concrete Creator (Конкретный Создатель): Переопределяет фабричный метод для возврата конкретного объекта Concrete Product.
- Product (Продукт): Определяет интерфейс объектов, которые создает фабричный метод.
- Concrete Product (Конкретный Продукт): Конкретная реализация интерфейса Product.
Преимущества:
- Уменьшает связанность между классами, использующими и создающими объекты.
- Позволяет добавлять новые типы продуктов без изменения клиентского кода.
- Способствует принципу открытости/закрытости (Open/Closed Principle).
Пример:
python
Фабричный метод — это порождающий шаблон проектирования, который определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта. Он инкапсулирует логику создания объекта в отдельный метод, который вызывается клиентским кодом. Это позволяет отделить код, использующий объекты, от кода, создающего их.
Ключевые компоненты:
- Creator (Создатель): Объявляет фабричный метод, который возвращает объект Product. Этот класс может иметь реализацию по умолчанию для фабричного метода.
- Concrete Creator (Конкретный Создатель): Переопределяет фабричный метод для возврата конкретного объекта Concrete Product.
- Product (Продукт): Определяет интерфейс объектов, которые создает фабричный метод.
- Concrete Product (Конкретный Продукт): Конкретная реализация интерфейса Product.
Преимущества:
- Уменьшает связанность между классами, использующими и создающими объекты.
- Позволяет добавлять новые типы продуктов без изменения клиентского кода.
- Способствует принципу открытости/закрытости (Open/Closed Principle).
Пример:
python