0

我需要在几个类之间共享 1 个实例。Connect 类具有创建 URL 和下载数据的方法,而 ui 是我获取数据以构建 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 
.
.
.

如果有的话,什么看起来更合理?

谢谢你。

4

2 回答 2

2

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

搜索“为什么全局变量不好”或“为什么单例访问器不好”这样的内容,你会得到比我的解释更多的细节。它们有一些用途,但如果你能提前避免它们,你可能会省去一些麻烦。与所有事物一样,每个事物都有取舍。

于 2012-07-01T13:04:00.247 回答
0

you must be very careful with the first option. As I see it there are a lot of drawbacks here:

  • Its not an object oriented style of programming. It rather smells like old fashioned C code
  • What happens if you should support a lot of such an instances.
  • Now what happens if you need to change them (in fancy terms if these instance are not immutable)?
  • Now what happens if your application goes multi-threaded?

While some of these points are validly applicable to the second solution you've described, in terms of maintainability and readability of your code the first solution is just a mess...

So to me the second one is better.

Hope this helps

于 2012-07-01T13:46:51.550 回答