Problemas com Design Patterns

1 resposta
R

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:

  1. 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?
    
  2. 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!!

1 Resposta

D
  1. a classe é abstrata mas pode prover uma funcionalidade básica em alguns métodos (inclusive no(s) contrutor(es)) e 1 ou + métodos abstratos para serem implementados por uma sub-classe. Quando a classe é abstrata é ilegal instanciá-la.

  2. CarroFactory não é um carro; mas sabe construir Carros. :wink:

Criado 27 de fevereiro de 2005
Ultima resposta 27 de fev. de 2005
Respostas 1
Participantes 2