проблема с полиморфизмом победить эти утверждения переключения / case

Продолжая на предыдущих вопросах (Вот, а такжеВот), Я реализовал базовый шаблон команд, создал свои классы команд и закодировал их в интерфейсе, поэтому при использовании любой команды вызыватьexecute() метод.

Тем не менее, я все еще нахожу себя неспособным встряхнуть эти утверждения случая: я читаю каждый символ из строки мастера / решения, которая состоит из случайных повторяющихся символов A, B, C или D, а затем извлекаю соответствующую реализацию команды из карты и вызовите ее метод execute.

Мой дизайн был таким:

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);

Но затем, когда я читаю каждую инструкцию, я снова вынужден прибегать к утверждениям:

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;}

Очевидно, что где-то по пути мне удалось победить преимущество полиморфизма перед заявлениями по делу.

Может ли это быть такая структура данных, которую я выбрал для хранения своих команд? Это может быть постоянная структура данных, из которой можно просто извлекать эти команды.

Еще одна вещь, которая приходит на ум - это название ключа / значения, которое я использовал на своей карте. Как я пытался концептуально связать каждую сохраненную команду с соответствующей инструкцией? т.е. выполнение команды "А", хранится на карте с ключом «А» поэтому он может соответствовать соответствующей инструкции «А»? Это кажется мне немного маловероятным, хотя.

Буду очень признателен за любую подсказку или дальнейший совет относительно моего следующего шага, чтобы раз и навсегда удалить эти заявления случая. Спасибо заранее

Ответы на вопрос(3)

Ваш ответ на вопрос