首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java模块化编程

Java模块化编程
EN

Stack Overflow用户
提问于 2015-08-11 05:41:42
回答 1查看 209关注 0票数 3

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

我正在尝试开发一个尽可能模块化的游戏。所以我有一个GameEngine类和一个GUI类,它们是完全独立的。另一个类是两者的接口。

问题是我无法让图形用户界面对象( actionPreformed例程所在的位置)触发GameEngine类中的方法。我正在尝试在接口中进行所有编程,而不必修改其他两个类中的任何一个(或者至少不使它们相互依赖)。

我的想法是让actionPerformed返回一个代码,该代码在指导下一个操作的接口中处理。

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

EN

回答 1

Stack Overflow用户

发布于 2015-08-11 06:20:45

使用一些编程模式,比如委托

ActionListener.java:

代码语言:javascript
复制
interface ActionListener {

    public boolean performAction(Action action);

}

GUI.java:

代码语言:javascript
复制
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;
    }

}

GameEngine.java:

代码语言:javascript
复制
class GameEngine implements ActionListener {

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

      return false;
    }

}

SomeInitializationCode.java

代码语言:javascript
复制
void init() {
  ...

  engine = new GameEngine();
  gui = new GUI();

  gui.setActionListener(engine);

  ...
}

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

另外,很抱歉我的英语不好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31929676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档