Замена для огромных операторов case

Я пытаюсь улучшить проект 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;
    }
}

Тогда эти «перехватчики» будут проверены и вызваны?

6
задан jSherz 21 February 2012 в 17:54
поделиться