проблема с полиморфизмом победить эти утверждения переключения / 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;}
Очевидно, что где-то по пути мне удалось победить преимущество полиморфизма перед заявлениями по делу.
Может ли это быть такая структура данных, которую я выбрал для хранения своих команд? Это может быть постоянная структура данных, из которой можно просто извлекать эти команды.
Еще одна вещь, которая приходит на ум - это название ключа / значения, которое я использовал на своей карте. Как я пытался концептуально связать каждую сохраненную команду с соответствующей инструкцией? т.е. выполнение команды "А", хранится на карте с ключом «А» поэтому он может соответствовать соответствующей инструкции «А»? Это кажется мне немного маловероятным, хотя.
Буду очень признателен за любую подсказку или дальнейший совет относительно моего следующего шага, чтобы раз и навсегда удалить эти заявления случая. Спасибо заранее