提问人:Sammy Guergachi 提问时间:10/29/2012 最后编辑:VikdorSammy Guergachi 更新时间:10/29/2012 访问量:267
相互传递多个对象
Passing Multiple objects To Each other
问:
这是一个有点奇怪的问题,我有一个 GUI 类,它在构造函数中启动一个 Logic 类,该类负责处理应用程序中的处理或物流,然后有一个 Handler 类,其中包含一堆附加到 GUI 类中的 UI 组件ActionListners
KeyListeners
在 Logic 和 Handler 类的构造函数中,我将 GUI 类作为参数,以便能够从 Logic 和 Handler 类操作在 GUI 类中创建的 GUI 组件
我的问题是 The Handler 使用 Logic 类,反之亦然(Logic 类使用 Handler 类),而我上面描述的方法实际上是不可能的,一个是实例,另一个是实例,一个在尝试使用另一个时为 null。
例:
public class GUI()
{
this.handler = new Handler(this);
this.logic = new Logic(this);
}
如果尝试使用某些内容,则将返回。handler
logic
null
解决这个问题的一种方法是让二传手拿走,反之亦然,但这似乎不是这个问题的答案。handler
logic
答:
简单:
public class GUI()
{
this.handler = new Handler(this);
this.logic = new Logic(this);
handler.setLogic(logic);
logic.setHandler(handler);
}
评论
在你第一次使用 and 之前,你可以把这个代码片段
if(handler == null)
this.handler = new Handler(this);
if(logic == null)
this.logic = new Logic(this);handler
logic
评论
我认为可以在 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();
}
}
关于“优雅”,我不认为(恕我直言)组件之间凌乱的依赖关系的原始设计是优雅的:)因此,与其专注于让这些东西看起来“优雅”,不如做一些重新思考,您可能会发现一切都会自动变得更加优雅。:)
评论
上一个:按值传递 - 树未删除 [重复]
下一个:通过常量引用传递对象?
评论
logic.setHandler(handler)
handler.setLogic(logic)