我需要在几个类之间共享一个实例。 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
.
.
.
什么似乎更合理?
谢谢。
答案 0 :(得分:2)
首选方法是将实例传递给任何类所需的构造函数。这样,就不会猜测某人是否设置了Global.c
以及何时可以使用它。它还清楚地表明每个类都需要Connect
个对象。另一个好处是,如果您的代码发生了变化并且您希望您的UI类不再依赖于同一个全局Connect
实例,那么您不再需要更改从此全局上下文中提取魔术实例的所有代码,并且你可以传入一个不同的对象。
搜索“为什么全局变量不好”或“为什么单身访问者不好”这样的内容,你会得到比我的解释更多的细节。它们有用途,但是如果你可以预先避免使用它们,你可以节省一些头痛。与所有事情一样,每个人都需要权衡利弊。
答案 1 :(得分:0)
你必须非常小心第一个选项。我认为它有很多缺点:
虽然其中一些要点适用于您所描述的第二个解决方案,但就代码的可维护性和可读性而言,第一个解决方案只是一团糟......
所以对我来说第二个更好。
希望这有帮助