通过几个类共享对象

时间:2012-07-01 12:41:38

标签: java

我需要在几个类之间共享一个实例。 Connect类有创建URL和下载数据的方法,ui是接口(swing表单),通过它我可以获取数据来构建url(日期包含url)。

最好的方法是什么?

想到:

1)通过以下方式实现全球化:

public class Global {

public static  Connect c;
}

2)在main()中创建实例,并将其传递给对象。

public static void main(String[] args) throws IOException {

           Connect c = new Connect();   // get url to download from
           ui form = new ui(c);         // the form to get data from 
.
.
.

什么似乎更合理?

谢谢。

2 个答案:

答案 0 :(得分:2)

首选方法是将实例传递给任何类所需的构造函数。这样,就不会猜测某人是否设置了Global.c以及何时可以使用它。它还清楚地表明每个类都需要Connect个对象。另一个好处是,如果您的代码发生了变化并且您希望您的UI类不再依赖于同一个全局Connect实例,那么您不再需要更改从此全局上下文中提取魔术实例的所有代码,并且你可以传入一个不同的对象。

搜索“为什么全局变量不好”或“为什么单身访问者不好”这样的内容,你会得到比我的解释更多的细节。它们有用途,但是如果你可以预先避免使用它们,你可以节省一些头痛。与所有事情一样,每个人都需要权衡利弊。

答案 1 :(得分:0)

你必须非常小心第一个选项。我认为它有很多缺点:

  • 它不是面向对象的编程风格。它有点像老式的C代码
  • 如果你应该支持很多这样的实例,会发生什么。
  • 现在如果你需要改变它们会发生什么(如果这些实例不是一成不变的话,那就用它来表达了吗?)
  • 现在,如果您的应用程序是多线程的,会发生什么?

虽然其中一些要点适用于您所描述的第二个解决方案,但就代码的可维护性和可读性而言,第一个解决方案只是一团糟......

所以对我来说第二个更好。

希望这有帮助