Я пытаюсь улучшить проект Java, который использует много больших операторов case. В случаях, когда используется оператор case, он используется для обработки события, с которым связан атрибут. Например:
public void jumpOverWall(int wallID) {
switch (wallID) {
case 0:
case 1213:
case 2123:
case 3123:
case 4123:
}
}
Числа не являются последовательными и для всех необходимо выполнить другое действие - например, сказать «Вы не можете перепрыгнуть через эту стену» или переместить персонажа в заданное положение. Есть очень немного случаев, в которых ответ случая следует за установленным образцом. Под этим я подразумеваю, что операторы switch не следуют шаблону, который допускал бы код, подобный следующему:
public void jumpOverWall(int wallID) {
someArray[1213] = 10;
someArray[3123] = 20;
if (playerJumpingSkill > someArray[wallID]) {
// Do something
} else {
sendPlayerMessage("You cannot do this!");
}
}
Поэтому мне интересно, как лучше всего справиться с этими «событиями». Вся идея системы стилей «обработчик событий» мне нравится, но я застрял в том, как ее реализовать (или лучшее решение проблемы). Слишком много «событий» (по моему мнению), чтобы иметь отдельный класс для каждого.
Есть ли метод / дизайн для перехвата событий? Будет ли это применимо / работа. Я бы искал метод легкой зацепки, такой как:
hookEvent(1213, new SomeInterface() {
boolean eventOK() {
// Do something
return true;
}
}
Тогда эти «крючки» будут проверены и вызваны?