这是一个有点奇怪的问题,我有一个 GUI 类,它在构造函数中启动一个逻辑类,负责处理处理或物流。应用程序然后他们是一个处理程序类,其中包含一堆ActionListners
KeyListeners
,它们附加到 GUI 类
在逻辑和处理程序类的构造函数中,我将 GUI 类作为参数,以便能够操纵从逻辑和处理程序类
中 GUI 类创建的GUI 组件我的问题是处理程序使用逻辑类,反之亦然(逻辑类使用处理程序< / strong> class)并且上面描述的方法实际上不可能,一个是另一个之前的实例,一个在尝试使用另一个时将为null。
示例:
public class GUI()
{
this.handler = new Handler(this);
this.logic = new Logic(this);
}
如果handler
尝试使用logic
中的内容,则会返回null
。
解决此问题的一种方法是让handler
的设定者采用logic
,反之亦然,但这似乎不是答案。
答案 0 :(得分:1)
简单:
public class GUI()
{
this.handler = new Handler(this);
this.logic = new Logic(this);
handler.setLogic(logic);
logic.setHandler(handler);
}
答案 1 :(得分:1)
我认为可以在GUI中公开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();
}
}
关于“优雅”,我不认为组件之间的(imho)凌乱的依赖关系的原始设计是完美的:)所以,不要把重点放在使这些东西看起来“优雅”,做一些重新思考,可能你会发现一切都会自动变得更加优雅。 :)
答案 2 :(得分:0)
在您第一次使用handler
和logic
之前,您可以将此代码段添加到其中
if(handler == null)
this.handler = new Handler(this);
if(logic == null)
this.logic = new Logic(this);