2014-12-22 24 views
1

開發一個JOGL的應用程序,這是(的一部分),我們的核心類結構對於核心部件實例使用靜態變量是否糟糕?

主要的JFrame

  • 瀏覽器(渲染)

    • inputListener

    • viewpole (用於相機/投影控制)

    • 圖(持有節點/網格)

      • 圖標處理程序(展開/摺疊與孩子的節點)

所以,如果我想打電話給methodX()在圖標處理程序(基本上是代表處理程序的紋理,它對於所有節點都是相同的),我必須致電:

Main.instance.getViewer().getGraph().getIconHandler().methodX() 

其中實例是

一個靜態變量保持主JFrame的實例鑑於它們都是:

1)實例化一次

2)在開始

3)都應該4)理論上沒有競爭條件的問題,當我們添加/讀取/修改/刪除節點時,我們使用的是較低級別的java.util.concurrent.locks.ReentrantReadWriteLock

將每個類的實例分配給每個相應類中的靜態變量是否危險/不好設計?

所以,如果我想訪問相同的methodX()我只想叫

IconHandler().instance.methodX() 

PS:我看了一些關於靜態變量的其他問題(),但我發現他們很普通,我的關於核心部分。

回答

3

只要你知道你只需要每個類的一個實例,這沒關係。這被稱爲singleton,是一個非常着名的設計模式。

問題是,你可能不能保證你只需要你的類的一個實例。對於數據連接或文件讀取器等單身人士來說,單身人士是很好的選擇,其中應該訪問數據的實例數量有內置的限制。

您正在濫用static關鍵字作爲訪問類的實例的懶惰方式,並且當您將程序展開爲包含這些類的多個實例時,它將回來並咬你。如果你認爲你只會需要一個實例 - 你不能保證永遠不會改變。

+0

好的,感謝您的反饋,凱文 – elect

+0

順便說一句,它仍然沒有咬我回來! :p – elect

+0

@elect這只是幾個月。等到你對多個項目有這種習慣,然後讓你寫了10年的軟件不能支持新的功能請求。 –

相關問題