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

questionAnswers(3)

yourAnswerToTheQuestion