PassFront
  1. PassFront
  2. База знаний
  3. Порождающие паттерны

Чем Factory Method отличается от Abstract Factory?

Порождающие паттерны

Factory Method — метод, который решает, какой конкретный продукт создать, внутри одной иерархии; Abstract Factory — объект, порождающий целое семейство связанных продуктов, согласованных между собой.

Factory Method

Создание делегируется подклассам: базовый Notification объявляет create_sender(), а EmailNotification и SmsNotification возвращают своих отправителей. Расширение — новый подкласс, существующий код не трогаем.

Abstract Factory

Нужен не один продукт, а согласованный набор: UiFactory создаёт кнопку, чекбокс и скроллбар, и клиент получает либо весь «тёмный» набор, либо весь «светлый» — смешать стили случайно невозможно.

Разница одной фразой

  • Factory Method — про наследование: «какой объект создать» решает подкласс.
  • Abstract Factory — про композицию: «какое семейство создать» решает переданный объект-фабрика.

Коротко для собеседования

Factory Method позволяет подклассу решить, какой один продукт создать, а Abstract Factory отдаёт клиенту целый согласованный набор продуктов, например все элементы одной темы UI. Первый выбирают для одной точки расширения, второй — когда важно не смешать продукты из разных семейств.

Другие вопросы раздела