У меня есть контроллер, который выполняет некоторые команды в соответствии с именем команды, взятым из URL-адреса. Суть в том, чтобы не использовать предложения if и switch. Насколько я знаю, есть ТОЛЬКО два способа сделать это - 1) шаблон команды 2) отражение.
//Command pattern
class Controller{
private HashMap<String,Command> commands;
public void executeCommand(String commandName){
commands.get(commandName).execute();
}
...
}
//reflection
class Controller{
public void readCommand(){
....
}
public void executeCommand(String commandName){
this.getClass().getMethod(commandName+"Command").invoke(this);
}
...
}
Итак вопросы:
- Какой лучше?
- Нормально ли в одном приложении позволять разработчикам использовать один из методов, которые они хотят.
- Есть ли другие способы?
execute
? Приведет ли это к тому, чтоexecuteCommand
попытается вызвать себя рекурсивно? Использование отражения таким образом, когда вы используете строку, введенную пользователем, чтобы определить, какое имя метода следует выполнить, выглядит очень опасным. С таким же успехом можно было бы поставить на своей программе табличку с надписью Эй, киберпреступники! СЮДА!!! - person ajb   schedule 21.11.2014