Não sei se é a solução mais correta mas resolvi assim:
Defino a classe abstrata
abstract class DispositivoGenerico {
abstract String getNome();
abstract String getFabricante();
}
Defino a classe para o primeiro dispositivo
class Dispositivo_X111 {
private String _nome = "X111";
private String _fabricante = "X";
public String getNome() {
return _nome;
public String getFabricante() {
return _fabricante;
}
}
Defino a classe para o segundo dispositivo
class Dispositivo_Y123 {
private String _nome = "X123";
private String _fabricante = "Y";
public String getNome() {
return _nome;
public String getFabricante() {
return _fabricante;
}
}
Defino uma classe Factory pra instanciar o a classe correta (dei uma lida no design pattern Factory e creio que é isso mesmo)
class DFactory_Versao_1 {
public static DispositivoGenerico getDevice(String modelo) {
if (model == null) return null;
if (model.equalsIgnoreCase("X111")) return new Dispositivo_X111();
if (model.equalsIgnoreCase("ME525")) return new Dispositivo_Y123();
return null;
}
}
Pensei em fazer a factory também desse jeito
class DFactory_Versao_2 {
public static DispositivoGenerico getDevice(String modelo) {
if (model == null) return null;
if (model.equalsIgnoreCase( new Dispositivo_X111().getNome() )) return new Dispositivo_X111();
if (model.equalsIgnoreCase( new Dispositivo_X123().getNome() )) return new Dispositivo_Y123();
return null;
}
}
No meu programa eu executo assim:
DispositivoGenerico dispositivo = DeviceFactory.getDevice(android.os.Build.MODEL);
A variável android.os.Build.MODEL contém o modelo do dispositivo no qual o programa está sendo executado.