Java模块化编程

时间:2015-08-10 21:41:42

标签: java user-interface actionlistener modular

我是Java和这个网站的新手。

我试图尽可能模仿游戏。所以我有一个GameEngine类和一个GUI clase,它们是完全独立的。还有另一个类是两者的接口。

问题是我无法获取GUI对象(actionPreformed例程所在的位置)来触发GameEngine类中的方法。我试图在界面中进行所有编程,而不必修改任何其他两个类(或者至少不使它们具有相关性)。

我的想法是让actionPerformed返回一个代码,该代码在指向下一个动作的界面中处理。

例如,NewGame按钮生成一个NewGameCode。但是如何使用该代码并在界面内触发GameEngine中的NewGame方法?

1 个答案:

答案 0 :(得分:0)

使用一些编程模式,例如委派

ActionListener.java:

char

GUI.java:

interface ActionListener {

    public boolean performAction(Action action);

}

GameEngine.java:

class GUI implements ActionListener {
    protected ActionListener actionListener;

    public void setActionListener(ActionListener listener) {
        this.listener = listener;
    }

    public boolean performAction(Action action) {
      // GUI knows, how to handle specified action:
      if (action.is("toggle-gui")) {
         ...
         return true;
      }

      // else, should Engine try to perform that action?
      if (listener != null)
        if (listener.performAction(action))
          return true;

      // rare occasion
      return false;
    }

}

SomeInitializationCode.java

class GameEngine implements ActionListener {

    public boolean performAction(Action action) {
      if (action.is("game-new")) {
         // start a new game here
         ...
         return true;
      }

      return false;
    }

}

另外,正如您可能已经猜到的那样,gui对象(如按钮)也有自己的动作侦听器。当GUI实例化一个按钮时,它将自己设置为按钮的动作监听器,因此,按钮的动作执行被委托给GUI,当GUI不知道时,如何执行该指定的动作 - 它代表们将工作委托给GameEngine。

P.S。抱歉我的英语不好。