【发布时间】:2012-10-18 09:27:03
【问题描述】:
这是一个有点奇怪的问题,我有一个 GUI 类,它在构造函数中启动一个 Logic 类,负责处理App 那么它们是一个 Handler 类,其中包含一堆 ActionListners KeyListeners 附加到 GUI 类中的 UI 组件
在 Logic 和 Handler 类的构造函数中,我将 GUI 类作为参数,以便能够操作 在 Logic 和 Handler 类的 GUI 类中创建的 GUI 组件
我的问题是 Handler 使用 Logic 类,反之亦然(Logic 类使用 Handler 类),而我上面描述的方法实际上是不可能的,一个是实例在另一个之前,一个在尝试使用另一个时将为空。
例子:
public class GUI()
{
this.handler = new Handler(this);
this.logic = new Logic(this);
}
如果handler 尝试使用logic 中的某些内容,则将返回null。
解决此问题的一种方法是为handler 设置一个设置器以获取logic,反之亦然,但这似乎不是问题的答案。
【问题讨论】:
-
只需使用 setter 方法而不是构造函数来将这些引用相互传递。即
logic.setHandler(handler)和handler.setLogic(logic)。这真的不是什么大问题。 -
我将在 main 中创建逻辑,将逻辑传递给 GUI 构造函数,并让 GUI 实例化处理程序。我不认为 Logic 应该直接与 Handler 对话。
-
这些类彼此了解太多。跨不同类/用途的对象的循环引用是代码异味。我会重构,这样你就可以打破依赖循环。
-
也许你是对的,我看看能不能改正,谢谢!
标签: java oop pass-by-value