Gostaria de saber quais são as vantagens e desvantagens entre as seguintes formas de implementação do padrão abstract factory:
public abstract class factory{
public abstract Automovel makeCaminhao();
public abstract Automovel makeCarro();
public abstract Automovel makeOnibus();
public abstract Automovel makeMoto();
}
e
[code]public abstract class factory{
public static final String CAMINHAO = "CAMINHAO";
public static final String CARRO = "CARRO";
public static final String ONIBUS = "ONIBUS";
public static final String MOTO = "MOTO";
public abstract Automovel makeAutomovel(String type);
}[/code]
AbstractFactory é mais interessante quando voce tem uma familia de produtos que seja fixa. Como vantagem menos classes vão ser criadas. Com o desvantagem elas serão mais acopladas.
FactoryMethod é preferivel quando a diversidade de produtos é muito diferente e não tem como classificá-los em algumas categorias. Como disvantagem mais classes serão criadas. Com vantagem elas serão menos acopladas.
Para AbstractFactory use o seu primeiro exemplo, para FactoryMethod use o do CV.
O seu segundo exemplo é o menos recomendado por que ele costuma levar a código spaghetti, ruim de manter e estender. Isso além de diminuir a tipagem forte do seu sistema.