Ответ
Паттерн 'Фабричный метод' (Factory Method) — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов, но позволяет подклассам изменять тип создаваемых объектов.
Основная цель — делегировать создание объектов от клиентского кода к дочерним классам. Это позволяет вводить новые типы продуктов, не изменяя код, который эти продукты использует.
Ключевые преимущества:
- Инкапсуляция: Логика создания объектов скрыта от клиента.
- Гибкость: Легко добавлять новые типы создаваемых объектов (продуктов), просто создав новый класс-создатель.
- Слабая связанность: Клиентский код работает с абстрактным интерфейсом продукта, а не с его конкретной реализацией.
Пример на Python:
from abc import ABC, abstractmethod
# Интерфейс Продукта
class Transport(ABC):
@abstractmethod
def deliver(self) -> str:
pass
# Конкретные Продукты
class Truck(Transport):
def deliver(self) -> str:
return "Доставка грузовиком по земле"
class Ship(Transport):
def deliver(self) -> str:
return "Доставка кораблем по морю"
# Абстрактный Создатель (Фабрика)
class Logistics(ABC):
@abstractmethod
def create_transport(self) -> Transport:
# Это и есть Фабричный метод
pass
def plan_delivery(self) -> str:
transport = self.create_transport()
return f"Логистика: {transport.deliver()}"
# Конкретные Создатели
class RoadLogistics(Logistics):
def create_transport(self) -> Transport:
return Truck()
class SeaLogistics(Logistics):
def create_transport(self) -> Transport:
return Ship()
# Клиентский код
road_logistics = RoadLogistics()
print(road_logistics.plan_delivery()) # Вывод: Логистика: Доставка грузовиком по земле
sea_logistics = SeaLogistics()
print(sea_logistics.plan_delivery()) # Вывод: Логистика: Доставка кораблем по морю