Какова основная цель и результат применения паттерна ‘Фабричный метод’?

Ответ

Паттерн 'Фабричный метод' (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()) # Вывод: Логистика: Доставка кораблем по морю