採用單例模式還是靜態方法?

2021-08-27 15:01:12 字數 826 閱讀 5348

採用單例模式還是靜態方法?

關於這個問題,下面是一些同仁的觀點:

觀點一:(單例)

單例模式比靜態方法有很多優勢:

首先,單例可以繼承類,實現介面,而靜態類不能(可以整合類,但不能整合例項成員);

其次,單例可以被延遲初始化,靜態類一般在第一次載入是初始化;

再次,單例類可以被整合,他的方法可以被覆寫;

最後,或許最重要的是,單例類可以被用於多型而無需強迫使用者只假定唯一的例項。舉個例子,你可能在開始時只寫乙個配置,但是以後你可能需要支援超過乙個配置集,或者可能需要允許使用者從外部從外部檔案中載入乙個配置物件,或者編寫自己的。你的**不需要關注全域性的狀態,因此你的**會更加靈活。

觀點二:(靜態方法)

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

觀點三:(good!)

由於dao的初始化,會比較佔系統資源的,如果用靜態方法來取,會不斷地初始化和釋放,所以我個人認為如果不存在比較複雜的事務管理,用singleton會比較好。個人意見,歡迎各位高手指正。  

還有一種類就是沒有成員變數或者有一些靜態成員變數的類,這種類可稱為式具類,比如我一在的專案中我將很多從資料庫中取資料裡的類寫成這種類,這種類不妨將全部的方法寫成靜態方法,用起來方便,執行效率也快(不用new 類少佔記憶體和節省了new的時間),注意前提條件:"沒有成員變數或者只有一些靜態成員變數",象jdk中就有很多這樣的類(多如牛毛)

單例模式 餓漢模式(靜態常量)

餓漢模式 靜態常量 優缺點說明 1 優點 寫法比較簡單,就是在類裝載的時候就完成例項化。避免了執行緒同 步問題。2 缺點 在類裝載的時候就完成例項化,沒有達到lazy loading的效果。如果從始 至終從未使用過這個例項,則會造成記憶體的浪費 3 這種方式基於classloder機制避免了多執行緒...

靜態屬性和靜態方法以及單例模式轉殖總結

靜態屬性和靜態方法以及單例模式轉殖總結 1.靜態成員包括 靜態屬性 靜態方法 2.靜態成員在類內與類外訪問 類內 self 類外 類名 函式名 3.靜態屬性與普通屬性的區別 靜態屬性每例項化一次不會被初始化 普通屬性每例項化一次就會被初始化 4.靜態方法與普通方法的區別 靜態方法必須使用靜態屬性 普...

單例模式 靜態內部類

靜態內部類是乙個很好的實現單例的方式 看 package cn.liz.syn public class staticinner 私有的靜態內部類 private static class inner 公共的 獲取例項的方法 public static staticinner getinstance...