← Назад ко всем вопросам

Паттерн: Фабричный метод (Factory Method)

1️⃣ Как кратко ответить

Фабричный метод — это порождающий паттерн проектирования, который определяет интерфейс для создания объектов, но позволяет подклассам изменять тип создаваемых объектов. Это позволяет делегировать создание объектов подклассам, обеспечивая гибкость и расширяемость системы.

2️⃣ Подробное объяснение темы

Фабричный метод — это один из наиболее известных и часто используемых паттернов проектирования в объектно-ориентированном программировании. Он относится к категории порождающих паттернов, которые фокусируются на процессе создания объектов.

Зачем нужен Фабричный метод?

Представьте, что у вас есть программа, которая работает с различными типами документов: текстовые файлы, PDF, изображения и т.д. Каждый из этих типов документов требует специфической обработки. Вместо того чтобы жестко закодировать создание каждого типа документа в основной логике программы, вы можете использовать Фабричный метод. Это позволит вам легко добавлять новые типы документов без изменения существующего кода.

Как работает Фабричный метод?

Фабричный метод предлагает создать интерфейс или абстрактный класс с методом, который будет отвечать за создание объектов. Подклассы этого интерфейса или абстрактного класса реализуют этот метод, создавая конкретные объекты.

Пример

Рассмотрим пример с транспортными средствами. У нас есть базовый класс Transport и его подклассы Car и Bike. Мы хотим создать фабрику, которая будет создавать объекты этих классов.

from abc import ABC, abstractmethod
​
# Абстрактный класс Transport
class Transport(ABC):
    @abstractmethod
    def deliver(self):
        pass
​
# Конкретный класс Car
class Car(Transport):
    def deliver(self):
        return "Delivering by car"
​
# Конкретный класс Bike
class Bike(Transport):
    def deliver(self):
        return "Delivering by bike"
​
# Абстрактный класс Creator
class Creator(ABC):
    @abstractmethod
    def factory_method(self):
        pass
​
    def some_operation(self):
        # Вызываем фабричный метод для создания объекта
        transport = self.factory_method()
        return transport.deliver()
​
# Конкретный класс CarCreator
class CarCreator(Creator):
    def factory_method(self):
        return Car()
​
# Конкретный класс BikeCreator
class BikeCreator(Creator):
    def factory_method(self):
        return Bike()
​
# Использование
car_creator = CarCreator()
print(car_creator.some_operation())  # Вывод: Delivering by car
​
bike_creator = BikeCreator()
print(bike_creator.some_operation())  # Вывод: Delivering by bike

Где применяется?

Фабричный метод широко используется в ситуациях, когда:

  • Необходимо делегировать создание объектов подклассам.
  • Требуется обеспечить расширяемость системы, позволяя добавлять новые типы объектов без изменения существующего кода.
  • Нужно уменьшить зависимость кода от конкретных классов, работая через интерфейсы или абстрактные классы.

Аналогия

Представьте, что вы управляете рестораном, который предлагает разные виды блюд. Вместо того чтобы каждый раз готовить блюдо самостоятельно, вы нанимаете шеф-поваров, каждый из которых специализируется на определенной кухне. Когда клиент заказывает блюдо, вы просто передаете заказ соответствующему шеф-повару, который знает, как его приготовить. В этой аналогии шеф-повара — это подклассы, а процесс передачи заказа — это фабричный метод.

Тема: ООП
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки