Я думаю, що в місцях, де ваші інстанції дуже складні, занадто складні та потворні для однієї фабрики і занадто складні, щоб інтерфейс інтерфейсу зрозумів, є місце для абстрактного фабричного візерунка.
Скажімо, це бренд TYPE_A - це не один клас. Скажімо, є сім'я з 100 видів подібних класів Type-A, і вам потрібно інстанціювати один об’єкт з них. Уявіть, що є детальна складна інформація, необхідна для того, щоб зробити правильний об'єкт з бренда багатьох подібних типів об'єктів, і в цьому об'єкті об'єкта потрібно точно знати, які параметри налаштовувати і як їх налаштовувати.
На спеціальній фабриці для цієї марки ми будемо їх розрізняти і отримувати точний об'єкт для інстанції, а також як інстанціювати його. ми будемо знати, що відповідно до входу з мережі (скажімо, який колір доступний в інтернет-магазині), а також з інших програм та служб, що працюють у фоновому режимі (параметри користувальницькому інтерфейсу про них не відомі).
І, можливо, завтра у нас з’явиться інша сім'я, скажімо, тип_B та type_C для інстанції. Таким чином, у інтерфейсу користувача буде "якщо ще" знати, чи бажає користувач "type_A", "type_B" або "type_C" - але класи фабрик вирішать, який саме клас із типу (від родини) будувати, і як його настроїти - які значення встановити для його параметрів, або надіслати його контрагенту. Все це - за багатьма параметрами, про які користувальницький інтерфейс не усвідомлює. Все це буде занадто багато для одного фабричного класу.