Poderíamos implementar da seguinte forma:
Carro meucarro;
Scanner scan = new Scanner(in);
System.out.println(“Entre com o tipo do carro (1-sedan/2-hatch):“) ;
int tipo = scan.getNextInt();
if(tipo==1)
meucarro = new sedan(“”);
else
meucarro = new sedan(“”);
Veja que, dependendo do tipo, criaremos um objeto de um tipo diferente. Esse código é exemplo de implementação, mas não é a forma mais correta. Para isso usamos o método fábrica.
Esse método permite retornar em tempo de execução o objeto do tipo correto. Uma forma de implementá-lo seria a seguinte:
Class fabricadecarros {
public Carro getCarro(int tipo){
switch(tipo){
case 1: return sedan(“");
break;
case 2: return hatch(“");
}
}
}
Vejam que esse método então retornará de forma instantânea o objeto correto em tempo de execução, dependendo do argumento do método getCarro. Isso melhora a coesão entre as classes, pois qualquer alteração como a adição de novos carros só precisaria ser feita nesse método.