Ипользовал ли паттерн Абстрактная фабрика
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Абстрактная фабрика в моей практике
Да, я активно использовал паттерн Abstract Factory в больших системах. Это один из самых полезных паттернов для управления семействами связанных объектов.
Что это и почему он нужен
Абстрактная фабрика решает проблему: когда система должна быть независима от способа создания своих объектов, особенно если есть семейства объектов, которые должны использоваться вместе.
Классический пример: UI по платформам
Представь: приложение работает на Windows, macOS, Linux. Нужны разные кнопки, окна, меню для каждой платформы, но интерфейс приложения один.
from abc import ABC, abstractmethod
class Button(ABC):
@abstractmethod
def render(self):
pass
class Checkbox(ABC):
@abstractmethod
def render(self):
pass
class WindowsButton(Button):
def render(self):
return "Render Windows-style button"
class MacButton(Button):
def render(self):
return "Render macOS-style button"
class UIFactory(ABC):
@abstractmethod
def create_button(self) -> Button:
pass
@abstractmethod
def create_checkbox(self) -> Checkbox:
pass
class WindowsFactory(UIFactory):
def create_button(self):
return WindowsButton()
def create_checkbox(self):
return WindowsCheckbox()
Реальный пример: Database abstraction
Я использовал этот паттерн для работы с разными БД (PostgreSQL, MySQL, SQLite):
class QueryBuilder(ABC):
@abstractmethod
def build_select(self, table: str) -> str:
pass
class PostgresQueryBuilder(QueryBuilder):
def build_select(self, table: str):
return f"SELECT * FROM {table} RETURNING *"
class ConnectionFactory(ABC):
@abstractmethod
def get_query_builder(self) -> QueryBuilder:
pass
class Database:
def __init__(self, factory: ConnectionFactory):
self.builder = factory.get_query_builder()
Преимущества
- Слабая связанность кода
- Легко менять реализацию
- Гарантирует согласованность объектов
- Открыто для расширения
Когда это необходимо
- Система работает с несколькими семействами объектов
- Нужна гибкость в выборе реализации
- Вероятны будущие расширения
Когда это излишнее
- Система работает только с одной реализацией
- Семейства объектов маленькие
Заключение
Абстрактная фабрика — это мощный инструмент для управления сложностью. Я использовал его везде, где нужна была гибкость. Ключ — не переусложнять: применяй только когда действительно нужен.