problema fazendo polimorfismo derrotar essas declarações switch / case
Continuando com as questões anteriores (AquieAqui), Eu implementei um padrão de comando básico, criei minhas classes de comando e codifiquei para uma interface, então quando qualquer comando é usado, chamar oexecute()
método.
No entanto, ainda estou me sentindo incapaz de agitar as declarações de caso: Estou lendo cada caractere de uma String de decisão / mestre, que é composta de caracteres aleatórios, repetidos A, B, C ou D e, em seguida, recupero a implementação relacionada do comando de um mapa e chamar seu método de execução.
Meu design foi assim:
public interface Command {
void execute();
}
public class CommandA implements Command{
//implements execute() method
}
private Map myMap= new HashMap();
myMap.put("A", new CommandA);
myMap.put("B", new CommandB);
myMap.put("C", new CommandC);
myMap.put("D", new CommandD);
Mas, quando eu leio cada instrução, novamente eu tenho que recorrer a declarações de caso:
switch(instructionFromString){
case 'A':{myMap.get("A").execute(); break;}
case 'B':{myMap.get("B").execute(); break;}
case 'C':{myMap.get("C").execute(); break;}
case 'D':{myMap.get("D").execute(); break;}
Obviamente, em algum momento consegui derrotar a vantagem do polimorfismo contra as declarações de caso.
Poderia ser o tipo de estrutura de dados que eu selecionei para armazenar meus comandos? Pode muito bem ser uma estrutura de dados permanente para apenas extrair esses comandos.
Outra coisa que vem à mente é a nomenclatura de chave / valor que usei no meu mapa. A maneira como tentei conceitualmente vincular cada comando armazenado à sua instrução associada? Ou seja, a implementação do comando "A" é armazenada no mapa com a chave "A", para que possa corresponder à instrução correspondente "A"? Isso me parece um pouco improvável.
Qualquer sugestão ou conselho adicional sobre o meu próximo passo para remover essas declarações de caso de uma vez por todas seria muito apreciado. Muito obrigado antecipadamente