Подход 2 не является заводским паттерном, но это не делает его анти-паттерном. IngredientsFactory
ничего не создает, является просто контейнером и может называться Recipe
.
Ключевое отличие состоит в том, что подход 1 генерирует ингредиенты внутри фабрики, тогда как подход 2 вводит ингредиенты извне. Подход 1 позволяет магазину Chica go использовать секретный рецепт для генерации ингредиентов, тогда как подход 2 требует магазина Chica go, чтобы все знали, что это за ингредиенты.
Выбор зависит от применения, но ни то, ни другое правильно или неправильно.
Также обратите внимание, что этот код в подходе 1 не будет компилироваться:
def createDough: Dough = new ThinDough
def createSauce: Sauce = new RedSauce
Это должно быть
val createDough: Dough = ThinDough
val createSauce: Sauce = RedSauce