天天看點

java中關于單例和靜态類的差別

突然興起,在寫代碼的時候糾結用單例呢..還是靜态呢..?

是否很多人都曾有過這樣的糾結?

好吧,我不是天秤座的,接下來總結一下對于單例和靜态類的差別吧..

先來個一血,大多數時候單例和靜态類看起來似乎是可以彼此替代的,甚至可以說靜态類比單例更單例...

那麼然而,既然比單例更單例,差別就有了吧...

接下來我們看個比較直覺的表格吧.想到一點寫一點吧.

單例和靜态類的差別

差別 單例 靜态類
執行個體化 懶加載and急加載 急加載?或許算是吧
通路控制 可以控制靜态getInstance方法通路修飾符(等于是統一管理)以及在方法上加入通路修飾符 隻能控制方法通路修飾符
參數傳遞 執行個體可以作為參數進行傳遞,政策,工廠等設計模式 不能适應設計模式
單例可靠性 可以被反射破壞 不可被破壞
複雜初始化 構造函數統一處理 靜态塊(可讀性不佳)

最後BB一句...從表格可以看出單例比靜态類會更具優勢,但靜态類由于其調用友善,故而更适用于工具類...或其他相對獨立的類...

單例則更适用于可變動的環境...複雜的操作及設計模式應用之中..