Factory Method e Abstract Factory

2 respostas
D

Olá pessoal,

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

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);
}

2 Respostas

cv1

Que tal...

interface VeiculoFactory {
  Veiculo create();
}

e...

public class CaminhaoFactory implements VeiculoFactory {
  public Veiculo create() { ... }
}

public class BicicletaFactory implements VeiculoFactory {
  public Veiculo create() { ... }
}

...
louds

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.

Criado 3 de outubro de 2004
Ultima resposta 5 de out. de 2004
Respostas 2
Participantes 3