Если в вашем коде то и дело встречаются бесконечные цепочки
if-elif-else для создания разных объектов, пришло время познакомиться с Factory Pattern. Это один из самых полезных порождающих паттернов, который берет на себя всю грязную работу по созданию экземпляров классов.💡 В чем суть
Вместо того чтобы вызывать конструктор класса напрямую (`EmailNotifier()`), вы обращаетесь к специальному методу-фабрике. Он сам решает, какой объект создать, основываясь на входных данных или конфигурации.
Представьте ресторан: вы не идете на кухню готовить блюдо сами (не создаете объект). Вы делаете заказ официанту (фабрике), и кухня возвращает вам готовый результат, не нагружая вас деталями рецепта.
3 способа сделать вашу фабрику лучше:
1. Словари вместо
if-elif: Чтобы код не превращался в «лесенку», используйте словарь, где ключи — это типы, а значения — сами классы.2. Передача параметров: Хорошая фабрика умеет не только создавать объект, но и сразу прокидывать в него нужные настройки (например, заголовок документа или автора).
3. Абстрактные базовые классы (ABC): Используйте модуль
abc, чтобы гарантировать, что все объекты, созданные фабрикой, имеют одинаковый набор методов (например, send() или `connect()`).🛠 Реальный пример: Фабрика подключений к БД
Это, пожалуй, самый практичный кейс. Вы можете создать метод
create_from_config(config), который сам поймет, нужно ли подключаться к MySQL, PostgreSQL или SQLite, просто прочитав файл настроек.
# Пример вызова
db = DatabaseFactory.create_from_config(production_config)
print(db.connect())
Когда использовать:
🔛 Когда у вас много родственных классов с общим интерфейсом.
🔛 Когда решение о том, какой класс создать, принимается только в момент работы программы (runtime).
🔛 Когда процесс создания объекта слишком сложен и вы хотите скрыть эту логику.
🔗 Полный гайд с примерами кода:
А вы используете паттерны в своих проектах или считаете их лишней абстракцией для Python?
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
