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?