Dúvida sobre o excesso de ifs [RESOLVIDO]

7 respostas
T

Li o blog da caelum sobre o assunto, mais tenho uma dúvida:
No meu caso eu recebo um parâmetro externo de um hardware com apenas um estado:

BATTERY_OK_LEVEL2 = 1 
BATTERY_OK_LEVEL3 = 2
BATTERY_1ST_ALARM = 4 
BATTERY_2ND_ ALARM = 6 
BATTERY_DISCHARGED = 8

E depois preciso montar na view um ProgressBar com a cor de cada estado da bateria, como não usar if nesse caso, pois já pensei em fabrica, mas mesmo assim continuo no if. alguém pode me ajudar?

7 Respostas

jeffev

Pode usar switch.

http://www.tiexpert.net/programacao/java/switch-case-default.php

T

jeffev:
Pode usar switch.

http://www.tiexpert.net/programacao/java/switch-case-default.php

Mas cairia no mesmo caso do if’s. Gostaria de uma solução mais O.O.

ViniGodoy
a) Use um map:
Map<Integer, Color> cores = new HashMap<Integer, Color>();
map.add(BATTERY_OK_LEVEL2, Color.GREEN);
map.add(BATTERY_OK_LEVEL3, Color.GREEN.darker());
...
Uso:
Color color = cores.get(batteryLevel);
b) Use um enum (se as cores forem fixas, eu prefiro essa):
public enum Battery {
   OK_LEVEL1(1, Color.Green), 
   OK_LEVEL2(2, Color.GREEN.darker()),
   FIRST_ALLARM(4, Color.YELLOW);

   private int code; 
   private Color color;
   public Batter(int code, Color color) {
       this.code = code;
       this.color = color;
   }

   public Color getColor { return color; }
   public int getCode() { return code; }
   public static Battery byCode(int code) {
       for (Battery b : values()) {
           if (b.getCode() == code) return b;
       }
       return null;
   }
}
Uso:
Color color = batteryLevel.getColor();
nel

Não seria o caso de usar o pattern Strategy ?
Por sinal, tem um exemplo do próprio ViniGodoy aqui no GUJ, usando enum.

R

Acho que o mais legal nos dias de hoje é usar enum

http://www.tiexpert.net/programacao/java/enum.php

cada enum vai ter uma cor
depois é só pegar o valor direto do objeto.

ViniGodoy
T

Obrigado a todos pelas repostas.

Criado 19 de setembro de 2012
Ultima resposta 19 de set. de 2012
Respostas 7
Participantes 5