我对Java还是很陌生,并尝试实现最佳实践。我有一堂课,我想大量重构。我四处搜寻,但找不到特别能解决我问题的内容。

我有一个名为Definitions的类,该类将所有事件名称映射到它们各自的事件ID。我还有另一个解析事件的类,称为EventHandlerEventHandler的switch语句变得非常大。我想减小处理程序方法的大小,以使代码更易于阅读。

我从下面截断了大约50个其他事件。在每种情况下,大约有20-30行代码。您可以想象此switch语句有多大。

我的Definitions课:

public class Definitions
{
    public static class EVENT
    {
        public static final int SEQUENCE_START = 10;
        public static final int SEQUENCE_HALT = 11;
        public static final int SEQUENCE_AUTHORIZED = 12;
    }
}


我的EventHandler课:

public handledStack parse(IRPEventType buffer)
{
    final int eventId = Integer.parseInt(buffer.reader().parse("EventID"));


    switch (eventId)
    {
        case Definitions.EVENT.SEQUENCE_START:
        {
            // stuff happens here
            break;
        }

        case Definitions.EVENT.SEQUENCE_HALT:
        {
            // stuff happens here
            break;
        }
        case Definitions.EVENT.SEQUENCE_AUTHORIZED:
        {
            // stuff happens here
            break;
        }
    }
}

最佳答案

我希望使用枚举实现策略模式。查看Strategy pattern using Enums. Need a simple example in Java

interface Strategy {
    void execute(Object param);
}

enum EVENT implements Strategy {
    SEQUENCE_START(10) {
        @Override
        public void execute(Object param) {
            // stuff happens here
        }
    },
    SEQUENCE_HALT(11) {
        @Override
        public void execute(Object param) {
            // stuff happens here
        }
    },
    SEQUENCE_AUTHORIZED(12) {
        @Override
        public void execute (Object param){
            // stuff happens here
        }
    };

    private final int id;

    EVENT(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}

public class Test {

    public void handledStack parse(IRPEventType buffer) {
        final int eventId =     Integer.parseInt(buffer.reader().parse("EventID"));
        for (EVENT event : EVENT.values()) {
            if (event.getId() == eventId) {
                event.execute(param);
                break;
            }
        }
    }
}

关于java - 使用枚举处理整数事件类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46221630/

10-11 22:14
查看更多