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

Abstract Factory, Factory Method, Example

Abstract Factory VERSUS Factory Method
---

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

Паттерны «Фабричный метод» и «Абстрактная фабрика» — это два похожих, но отличающихся подхода к созданию объектов.

Оба паттерна решают проблему создания объектов, но решают её разными способами и преследуют разные цели.

Основные различия:

1. Уровень абстракции

  • Фабричный метод:
  • создает единичные объекты определенного типа.
  • Он определяет метод создания объекта, но оставляет решение о том, какой именно объект создать, конкретным подклассам.
  • Абстрактная фабрика:
  • создает целые семейства объектов, которые зависят друг от друга и принадлежат одной тематике.
  • Она не просто создает один объект,
  • а формирует набор объектов, согласованных между собой.

2. Гибкость и расширение

  • Фабричный метод: обеспечивает свободу в выборе конкретного типа объекта, который нужно создать.
  • Например, можно создать разные виды автомобилей, используя один и тот же метод фабрики.
  • Абстрактная фабрика: предоставляет возможность создавать несколько взаимосвязанных объектов сразу.
  • Это позволяет создавать целостные комплексы объектов, которые поддерживают общее семантическое соглашение
  • (например, набор UI-элементов, принадлежащих одной теме оформления).

3. Способ задания зависимости

  • Фабричный метод:
  • вызывает фабричный метод непосредственно в клиентском коде, а подклассы выбирают конкретный объект для создания.
  • Абстрактная фабрика:
  • использует абстрактный интерфейс для создания набора объектов,
  • а конкретные фабрики предоставляют реализации для создания конкретных наборов объектов.

4. Степень контроля над созданием объектов

  • Фабричный метод:
  • дает контроль над созданием одного объекта за раз.
  • Абстрактная фабрика:
  • дает контроль над созданием целой группы объектов одновременно.

Пример сравнения:

Ситуация 1: Выбор автомобиля

  • Фабричный метод:
  • фабрика производит автомобили разных марок (BMW, Mercedes, Tesla).
  • Клиент вызывает фабричный метод и получает машину желаемого бренда.
  • Абстрактная фабрика:
  • фабрика производит комплектацию автомобиля (корпус, мотор, колеса).
  • Каждая фабрика отвечает за производство полной комплектации машины (спортивная машина, внедорожник, седан),
  • включающей согласованные между собой комплектующие.

Ситуация 2: Создание графического интерфейса

  • Фабричный метод:
  • фабрика создает кнопки, выпадающие списки, текстовые поля и другие элементы интерфейса.
  • При этом клиент сам выбирает, какой элемент создать.
  • Абстрактная фабрика:
  • фабрика создает целый набор элементов интерфейса (кнопки, чекбоксы, текстовые поля),
  • принадлежащий одной теме оформления (например, "тёмная тема" или "светлая тема").
  • Фабрики специализируются на создании наборов элементов, подходящих друг к другу по стилю.

В итоге:

  • Фабричный метод хорош,
  • когда нужно создать единственный объект определенного типа и дать возможность подклассам выбирать конкретный тип объекта.
  • Абстрактная фабрика полезна, когда нужно создать целое семейство взаимосвязанных объектов,
  • принадлежащих одной тематике или цели,
  • и гарантировать, что они будут соответствовать друг другу.

Выбор паттерна зависит от того, насколько сложной и обширной должна быть система создания объектов.

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

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