Consideremos o seguinte código:
public abstract class Carro {
protected float valor;
public float getPreco() {
return valor;
}
}
public class Vectra extends Carro {
public Vectra() {
valor = 30000.0f;
}
}
public class Omega extends Carro {
public Omega() {
valor = 50000.0f;
}
}
public class Golf extends Carro {
public Golf() {
valor = 35000.0f;
}
}
public class Gol extends Carro {
public Gol() {
valor = 20000.0f;
}
}
Agora nossa classe Factory, que é bem simples, e decide qual classe será instanciada, dependendo do parâmetro do tipo passado para o método getClass( ).
public class CarroFactory {
public static Carro getCarro( String tipoCarro ) {
if( tipoCarro == null ) return null;
else if( tipoCarro.equals(“Vectra”) ) return new Vectra();
else if( tipoCarro.equals(“Omega”) ) return new Omega();
else if( tipoCarro.equals(“Golf”) ) return new Golf();
else if( tipoCarro.equals(“Gol”) ) return new Gol();
else return null;
}
}
Vamos agora implementar a classe que se utiliza de todo este aparato do padrão Factory.
public class FactoryExample {
public static void main( String args[] ) {
//parâmetro passado como argumento no console
//pega a instância do tipo do carro
Carro carro = CarroFactory.getCarro( args[0] );
//mostra o valor
if( carro != null ) {
System.out.println( "Preço: " + carro.getPreco() );
}
}
}
Agora as perguntas:
-
Em : public abstract class Carro { protected float valor;
public float getPreco() { return valor; } } Um metodo de uma classe abstrata(no caso,getPreco) pode conter declaraçoes em seu corpo?
-
em:
public class CarroFactory {
public static Carro getCarro( String tipoCarro )O metodo getcarro é criado pra classe Carro, em:
public class FactoryExample {
public static void main( String args[] ) {
//parâmetro passado como argumento no console
//pega a instância do tipo do carro
Carro carro = CarroFactory.getCarro( args[0] );
O metodo getcarro naum deveria ter sido declarado na classe Carro para poder ser implementado em CarroFactory,e a classe CarroFactory nao deveria estender Carro?
Bom,eu sei q o tópico ficou meio longo,mas agradeço a quem puder ajudar…abraços!!
