2012-07-01 50 views
0

我需要在幾個類之間共享1個實例。 Connect類具有創建URL和下載數據的方法,ui是通過其獲取數據以構建url(接口包含url)的接口(swing形式)。通過幾個類共享對象

這樣做的最佳方法是什麼?

思想:

1),使得通過全球:

public class Global { 

public static Connect c; 
} 

2)使在主)的實例(,並使其通過的對象。

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

您需要更具體,因爲答案取決於確切的情況。 – biziclop

回答

2

首選的方法通常是將實例傳遞給任何需要它的類的構造函數。這樣,這不是猜測某人是否已經設置了Global.c以及何時應該可以使用它。它也清楚地表明每個班級需要一個Connect對象。另一個好處是,如果你的代碼改變了,並且你希望你的UI類不再依賴相同的全局實例,那麼你不再需要改變你從這個全局上下文中抽取魔術實例的所有代碼,並且你可以通過在不同的對象。

按照「爲什麼是全局變量不好」或「爲什麼單身訪問器不好」等問題進行搜索,您將獲得比我的解釋更多的細節。它們有用途,但如果你能夠在前面避免它們,你可以節省一些頭痛。與所有事情一樣,每個人都有權衡。

0

您必須非常小心第一個選項。正如我所看到的,這裏有很多缺點:

  • 它不是面向對象的編程風格。它相當聞起來像老式的C代碼
  • 如果你應該支持很多這樣的實例會發生什麼。
  • 現在會發生什麼,如果你需要改變它們(如果這些實例不是不可變的,那麼花哨的話)?
  • 現在如果您的應用程序進入多線程會發生什麼?

雖然這些點都有效地適用於第二解決你所描述,在可維護性和代碼的可讀性方面的第一個解決方案僅僅是一個爛攤子......

所以給我的第二個更好。

希望這可以幫助