Я пытаюсь улучшить проект 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;
}
}
Тогда эти «перехватчики» будут проверены и вызваны?