2

这是一个有点奇怪的问题,我有一个GUI类,它在构造函数中启动一个逻辑类,负责处理应用程序中的处理或物流,然后它们是一个处理程序类,其中包含一堆ActionListners KeyListeners附加到 UI GUI类中的组件

LogicHandler类的构造函数中,我将GUI类作为参数,以便能够从LogicHandler类操作在GUI类中创建的GUI组件

我的问题是Handler 使用Logic类,反之亦然(Logic类使用Handler类),而我上面描述的方法实际上是不可能的,一个是实例在另一个之前,一个在尝试时将为空使用另一个。

例子:

public class GUI() 
{
    this.handler = new Handler(this);
    this.logic = new Logic(this);
}

如果handler尝试使用某些东西,logic那么null将被退回。

解决这个问题的一种方法是让 setterhandler接受logic,反之亦然,但这似乎不是这个问题的答案。

4

3 回答 3

1

简单的:

public class GUI() 
{
    this.handler = new Handler(this);
    this.logic = new Logic(this);
    handler.setLogic(logic);
    logic.setHandler(handler);
}
于 2012-10-29T02:50:54.613 回答
1

我认为可以只在 GUI 中公开 Handler 和 Logic,并让公众访问它。通过这样做,由于您的 Handler 和 Logic 已经引用了 GUI,它们可以间接地相互访问:

class Gui {
  private Handler handler;
  private Logic logic;

  public Handler getHandler() {
    return this.handler;
  }
  public Logic getLogic() {
    return this.logic;
  }
}

class Handler {
  private Gui gui;
  public Handler(Gui gui) {
    this.gui = gui;
  }

  public void doSomething() {
    // access logic
    this.gui.getLogic().doSomeLogic();
  }
}

关于“优雅”,我认为组件之间(恕我直言)凌乱依赖的原始设计根本不是优雅的:) 所以,与其专注于让这些东西看起来“优雅”,不如做一些重新思考,可能你会发现一切自动变得更加优雅。:)

于 2012-10-29T03:46:23.473 回答
0

在你第一次使用之前handlerlogic你可以把这个代码片段
if(handler == null)
this.handler = new Handler(this);
if(logic == null)
this.logic = new Logic(this);

于 2012-10-29T02:52:34.753 回答