靜態與單例 轉載

不少時候,單例、靜態類的區別和使用場景一直糾纏不清,也比較容易混淆,我整理分析了一下,現將相關區別、聯繫與使用場景作以下描述:編程

 

§ 單例windows

一、單例能夠繼承類,實現接口,體現OOP思想緩存

二、單例能夠被延遲初始化服務器

三、單例類能夠被集成,它的方法能夠被覆寫;也就是能夠多態多線程

四、垃圾回收:產生的惟一實例會一直駐留在內存中函數

五、使用場景:工具

(1)不存在比較複雜的事務管理,用單例比較好,eg:DAO初始化比較佔系統資源的,若是用靜態類方法來取,會不斷地初始化和釋放性能

(2)記錄系統日誌優化

(3)當要控制某個類在內存中實例個數只能有一個時線程

(4)只能多線程使用,那麼多線程中實例變量就是多線程共享的,eg:windows的任務管理器,整個windows只須要一個實例

(5)在應用程序中,服務器的配置信息存放在一個文件中,這些配置數據由一個單例對象統一讀取,而後服務進程中的其餘對象再經過這個單例對象獲取這些配置信息。

          這種方式簡化了在複雜環境下的配置管理。管理過程當中,一些中間耗時檢測過程不用重複執行,帶來響應速度的優化。

          不是必須這樣,用普通類也同樣實現,每次應用前實例化,用完銷燬,相對來講性能差一些而已

 

§ 靜態類

一、靜態類不能繼承類,實現接口,靜態類是密封類,結構化編程時代的概念

二、靜態類在第一次加載時初始化

三、垃圾回收:隨着靜態方法的執行完畢而及時回收

四、類能夠有一個靜態構造函數,但沒有實例構造函數

五、使用場景:

(1)工具集HELPER

(2)使用靜態類成員變量維護一個狀態,使得可讓多實例共享這個變量,eg:統計使用

(3)能夠用它來實現一些相似緩存的功能

 

§ 類似點

一、內存佔用,二者相同

相關文章
相關標籤/搜索