我仍然不熟悉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;
}
}
}
答案 0 :(得分:2)
我更喜欢使用枚举的状态模式实现。查看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;
}
}
}
}