Por que o Abstract Factory lida com famílias e o Factory Method com a geração de um único objeto?

Pelo que li, o padrão abstrato de fábrica normalmente se preocupa em criar vários objetos que estão todos associados à mesma família, e o padrão de método de fábrica se preocupa em gerar um único objeto.

Considere o seguinte exemplo, que inverte essas preocupações:

// Factory Method (base class) allowing for creation of families of objects
public class BasePizzaCreator{
    abstract ISauce CreateSauce();
    abstract IToppings CreateToppings();
    abstract ICrust CreateCrust();
}

// Abstract Factory (interface) defining contract to create a single object
public interface IPizzaFactory{
    abstract IPizza CreatePizza();
}

É óbvio que vocêpode use-os dessa maneira - mas é uma violação do espírito dos padrões? Se sim, por quê?

O que eu realmente quero entender aqui é o seguinte: Por que o Abstract Factory é a melhor abordagem para criar famílias de objetos relacionados e o método Factory a melhor abordagem para criar um único objeto?

questionAnswers(2)

yourAnswerToTheQuestion