Я видел, как этот вопрос поднимался здесь и там несколько раз, но я так и не нашел ответа, который меня удовлетворил бы.
Из Википедии:
Builder ориентирован на пошаговое построение сложного объекта. Абстрактная фабрика подчеркивает семейство объектов продукта (простых или сложных). Builder возвращает продукт в качестве последнего шага, но что касается абстрактной фабрики, продукт возвращается немедленно.
Но для клиента это не одно и то же? Он получает полный объект после того, как он построен, поэтому для него нет дополнительных функций.
Единственный способ, которым я это вижу, - это поэтапная организация кода конструктора для создания структуры для реализации конструкторов. Что приятно, но вряд ли будет большим шагом от абстрактной фабрики.
Следующий фрагмент из Википедии является хорошим ориентиром, чтобы понять мою точку зрения:
Часто проекты начинаются с использования фабричного метода (менее сложный, более настраиваемый, подклассы множатся) и эволюционируют в абстрактную фабрику, прототип или конструктор (более гибкий, более сложный) по мере того, как дизайнер обнаруживает, где требуется большая гибкость.
Если это так, то какая сложность должна быть внесена в вашу систему, если вы перейдете от абстрактной фабрики к построителю?
Я хочу сказать, что я не могу найти пример, в котором ясно, что абстрактной фабрики будет недостаточно, и вместо этого вам понадобится Builder.