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

Стоит использовать когда классу заранее неизвестно, объекты каких классов ему нужно создавать, когда класс хочет, чтобы его подклассы определяли, какие объекты создавать или когда нужно локализовать логику создания объектов в одном месте.

Используется в модуле datetime, Django, unittest.mock и в pathlib.Path.

Плюсы: Избавляет класс от привязки к конкретным классам продуктов, выделяет код производства продуктов в одно место, упрощает добавление новых продуктов, реализует принцип открытости/закрытости.

Минусы: Может привести к созданию большого числа подклассов и усложняет код из-за введения дополнительных классов.

В отличие от Абстрактной фабрики и Строителя, Фабричный метод создает и возвращает один готовый объект.

Примерчик: `class Document: def init(self, name): self.name = name

def open(self): return f"Открытие документа {self.name}"

class SpreadsheetDocument(Document): def calculate(self): return "Выполнение расчетов"

class TextDocument(Document): def write(self): return "Написание текста"

class DocumentCreator: @classmethod def create_document(cls, doc_type, name): if doc_type == "spreadsheet": return SpreadsheetDocument(name) elif doc_type == "text": return TextDocument(name) else: raise ValueError(f"Неизвестный тип документа: {doc_type}")

#Использование

doc = DocumentCreator.create_document("spreadsheet", "Отчет.xlsx") print(doc.open()) # Открытие документа Отчет.xlsx print(doc.calculate()) # Выполнение расчетов

doc = DocumentCreator.create_document("text", "Статья.docx") print(doc.open()) # Открытие документа Статья.docx print(doc.write()) # Написание текста #weekofpatterns`