java - 替换巨大的案例陈述

标签 java design-patterns hook

我正在尝试改进一个使用大量大型案例语句的 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/

相关文章:

java - IBM Bluemix : Will it work for a Spring-MVC , Postgresql 与我们的域名

design-patterns - 开闭原则 vs 策略模式

git - 如何在 git add 之前自动调用脚本?

c# - 重复属性设计模式

c# - Hook 浏览器的选项卡更改事件

c++ - 后台应用监听快捷键?

java - JavaFrame 在 Matlab 中有什么作用?

java - 文件的递归反向行不适合我

Java 可视化 - 如何在 Java 中转置 JTable?

c# - 使用 MVP 模式时应该在哪里创建 ListViewItem 列表?