суббота, 19 июля 2025 г.

Abstract Factory, Example, Giga, Path

Abstract Factory, Example, Giga, Path

https://refactoring.guru/ru/design-patterns/abstract-factory

https://giga.chat/link/gcsUUyXJCB

D:\VC25\Otus\Py\projects\des_patterns\2_abstarct_factory

Цели нашего примера:

Мы решили продемонстрировать,

как паттерн «Абстрактная фабрика» позволяет создавать целостные наборы объектов,

относящихся к определенной тематике (семейству), и гарантирует,

что объекты из одного семейства соответствуют друг другу.

Задача:

Нам нужно создать интерфейс (UI),

который поддерживает две темы оформления: светлую и тёмную.

Наша задача — спроектировать такую систему, чтобы можно было легко переключаться между темами,

при этом сохранив логичность и консистентность каждого элемента (например, кнопка, чекбокс и текстовое поле) в рамках выбранной темы.

Как мы подошли к решению:

Мы использовали паттерн «Абстрактная фабрика», потому что:

  • Нам нужно создавать целые наборы элементов интерфейса, а не единичные объекты.
  • Важно, чтобы элементы из одного набора соответствовали друг другу визуально и стилистически.
  • Должна быть возможность легко переключаться между наборами (темами), без необходимости изменять клиентский код.

Какие этапы мы выполнили:

  1. Определение абстрактных интерфейсов:
    • Мы определили абстрактный класс для UI-элементов (AbstractUIElement),
    • который обязывает все реальные элементы интерфейса (кнопки, чекбоксы,
    • текстовые поля) реализовать метод render.
    • Также мы определили абстрактную фабрику (AbstractUIFactory), которая обязана создавать полный набор элементов (кнопку,
    • чекбокс и текстовое поле).
  2. Создание конкретных реализаций:
    • Далее мы создали конкретные классы элементов интерфейса для каждой темы (светлые и темные версии).
    • Затем мы разработали конкретные фабрики (LightUIFactory и DarkUIFactory), каждая из которых способна создать набор элементов,
    • соответствующий своей теме.
  3. Организация взаимодействия:
    • Наш клиентский код (функция ui_elements_demo) принимает любую фабрику и вызывает методы фабрики для создания элементов.
    • По сути, клиентский код не знает, какую именно тему он получит — он просто просит у фабрики создать элементы и вызывает их методы.

Что получилось в результате:

  1. Модульность и расширение:
    • Весь код аккуратно разделён на части, и любая дополнительная тема (например,
    • третья — красная тема или зелёная) может быть легко добавлена путём создания новой фабрики и новых классов элементов.
  2. Независимость от конкретного типа:
    • Нет никакой зависимости между элементами одной темы и клиентским кодом.
    • Переключиться на другую тему можно просто сменив фабрику.
  3. Корректность взаимодействия:
    • Элементы из одного семейства гарантированно сочетаются друг с другом.
    • Нельзя случайно смешать светлые и тёмные элементы,
    • так как каждая фабрика создаёт однородный набор.

Итоговый вывод:

Наш пример наглядно показал,

как паттерн «Абстрактная фабрика» позволяет создавать целостные наборы объектов,

организованных по общему признаку (тема оформления).

Благодаря такому подходу наше приложение стало легко настраиваемым и расширяемым,

позволяя добавлять новые темы без изменения существующего кода.

  • Проверка правильность размещения файлов и отсутствие конфликтов имен.
  • Можно развить идею, добавив третью тему или новый тип элемента интерфейса.
  • Расширении функциональных возможностей элементов (например, добавить анимацию, интерактивность).

Комментариев нет:

Отправить комментарий