1. 程式人生 > >【C#】什麼時候使用單例什麼時候使用靜態類?

【C#】什麼時候使用單例什麼時候使用靜態類?

觀點一:(單例

單例模式比靜態方法有很多優勢:
首先,單例可以繼承類,實現介面,而靜態類不能(可以整合類,但不能整合例項成員);
其次,單例可以被延遲初始化,靜態類一般在第一次載入是初始化;
再次,單例類可以被整合,他的方法可以被覆寫;
最後,或許最重要的是,單例類可以被用於多型而無需強迫使用者只假定唯一的例項。舉個例子,你可能在開始時只寫一個配置,但是以後你可能需要支援超過一個配置集,或者可能需要允許使用者從外部從外部檔案中載入一個配置物件,或者編寫自己的。你的程式碼不需要關注全域性的狀態,因此你的程式碼會更加靈活。

觀點二:(靜態方法)靜態方法中產生的物件,會隨著靜態方法執行完畢而釋放掉,而且執行類中的靜態方法時,不會例項化靜態方法所在的類。如果是用singleton, 產生的那一個唯一的例項,會一直在記憶體中,不會被GC清除的(原因是靜態的屬性變數不會被GC清除),除非整個JVM退出了。這個問題我之前也想幾天,並且自己寫程式碼來做了個實驗。

2. 從上面的程式碼裡你可以看出來,單例模式使用的類實際上就是一個普通的類。因此你可以把它們當成引數傳遞給其他指令碼。

3. 單例模式可以延遲類的初始化。從程式碼裡你可以看出,只有需要的時候才會例項化那個單例。而靜態類在載入的時候就被綁定了。

4. 單例具有很好的面向物件的特性。這句話比較虛,我的理解是它的可變性很大,可以繼承可以過載等等等等。

【以上文章摘自多位大神部落格】