Чем 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. Первый выбирают для одной точки расширения, второй — когда важно не смешать продукты из разных семейств.