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

Ипользовал ли паттерн Абстрактная фабрика

1.8 Middle🔥 131 комментариев
#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Абстрактная фабрика в моей практике

Да, я активно использовал паттерн 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()

Преимущества

  • Слабая связанность кода
  • Легко менять реализацию
  • Гарантирует согласованность объектов
  • Открыто для расширения

Когда это необходимо

  • Система работает с несколькими семействами объектов
  • Нужна гибкость в выборе реализации
  • Вероятны будущие расширения

Когда это излишнее

  • Система работает только с одной реализацией
  • Семейства объектов маленькие

Заключение

Абстрактная фабрика — это мощный инструмент для управления сложностью. Я использовал его везде, где нужна была гибкость. Ключ — не переусложнять: применяй только когда действительно нужен.

Ипользовал ли паттерн Абстрактная фабрика | PrepBro