我对Java还是很陌生,并尝试实现最佳实践。我有一堂课,我想大量重构。我四处搜寻,但找不到特别能解决我问题的内容。
我有一个名为Definitions
的类,该类将所有事件名称映射到它们各自的事件ID。我还有另一个解析事件的类,称为EventHandler
。 EventHandler
的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/