不少時候,單例、靜態類的區別和使用場景一直糾纏不清,也比較容易混淆,我整理分析了一下,現將相關區別、聯繫與使用場景作以下描述:編程
§ 單例windows
一、單例能夠繼承類,實現接口,體現OOP思想緩存
二、單例能夠被延遲初始化服務器
三、單例類能夠被集成,它的方法能夠被覆寫;也就是能夠多態多線程
四、垃圾回收:產生的惟一實例會一直駐留在內存中函數
五、使用場景:工具
(1)不存在比較複雜的事務管理,用單例比較好,eg:DAO初始化比較佔系統資源的,若是用靜態類方法來取,會不斷地初始化和釋放性能
(2)記錄系統日誌優化
(3)當要控制某個類在內存中實例個數只能有一個時線程
(4)只能多線程使用,那麼多線程中實例變量就是多線程共享的,eg:windows的任務管理器,整個windows只須要一個實例
(5)在應用程序中,服務器的配置信息存放在一個文件中,這些配置數據由一個單例對象統一讀取,而後服務進程中的其餘對象再經過這個單例對象獲取這些配置信息。
這種方式簡化了在複雜環境下的配置管理。管理過程當中,一些中間耗時檢測過程不用重複執行,帶來響應速度的優化。
不是必須這樣,用普通類也同樣實現,每次應用前實例化,用完銷燬,相對來講性能差一些而已
§ 靜態類
一、靜態類不能繼承類,實現接口,靜態類是密封類,結構化編程時代的概念
二、靜態類在第一次加載時初始化
三、垃圾回收:隨着靜態方法的執行完畢而及時回收
四、類能夠有一個靜態構造函數,但沒有實例構造函數
五、使用場景:
(1)工具集HELPER
(2)使用靜態類成員變量維護一個狀態,使得可讓多實例共享這個變量,eg:統計使用
(3)能夠用它來實現一些相似緩存的功能
§ 類似點
一、內存佔用,二者相同