我正在尝试改进一个使用大量大型案例语句的 Java 项目。在使用 case 语句的情况下,它用于处理具有关联属性的事件。例如:
public void jumpOverWall(int wallID) {
switch (wallID) {
case 0:
case 1213:
case 2123:
case 3123:
case 4123:
}
}
数字不是连续的,都需要执行不同的 Action - 例如说“你不能跳过这堵墙”或将角色移动到设定位置。案例响应遵循固定模式的案例很少。我的意思是 switch 语句不遵循允许类似于以下代码的模式:
public void jumpOverWall(int wallID) {
someArray[1213] = 10;
someArray[3123] = 20;
if (playerJumpingSkill > someArray[wallID]) {
// Do something
} else {
sendPlayerMessage("You cannot do this!");
}
}
因此,我想知道处理这些“事件”的最佳方式。 “事件处理程序”样式系统的整个想法对我很有吸引力,但我对如何实现它(或更好地解决问题)感到困惑。有太多“事件”(在我看来),无法为每个事件设置单独的类(class)。
是否有 Hook 事件的方法/设计?这是否适用/有效。我会寻找一种简单的 Hook 方法,例如:
hookEvent(1213, new SomeInterface() {
boolean eventOK() {
// Do something
return true;
}
}
然后检查并调用这些“钩子(Hook)”?
最佳答案
命令模式可能是您更好的选择。说,你有命令对象实现 界面:
public Interface Command {
void processEvent(Event e);
}
然后你可以有一些命令的散列,由事件代码键入 - 更具可读性。你甚至可以使用 DI 容器(spring 最受欢迎,但也有 picocontainer 或 google guice,当然我错过了一些)来创建命令对象——只需将相应的对象与键注册为事件代码。这将为您节省散列填充的代码。
它甚至不必是很多类 - 它可能只是配置不同的实例(取决于你的用例) - 今天没有类展示
关于java - 替换巨大的案例陈述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9382580/