假定將單例模式限定為不是全用靜態函式實現。
1、使用的方便性:如果需要初始化工作,單例模式可以在建構函式裡面完成,全靜態函式的類需要乙個額外的函式來完成初始化工作,而且使用者如果沒有呼叫 initialize 函式,那麼後續的操作就會有問題。而建構函式會被預設呼叫,所以使用起來比較簡單,對使用者做出了最少的假設。
2、初始化時機:單例模式初始化比較靈活,可以在需要的時候初始化,而全靜態函式必然導致成員全為靜態成員,靜態成員是在編譯時就初始化好了。如果初始化成本比較昂貴,並且程式裡面未必一定使用這個類,那這將是單例模式的乙個很大優勢。順便說一下全域性變數,全域性變數的初始化順序是未指定的。
例如 全域性變數int a; int b;編譯器是先初始化a還是先初始化b?我想大家只能靠猜,或者在某個編譯器上實驗一下給出答案,一旦要是有個新編譯器,結果又會是什麼樣子呢?
3、最重要的區別:單例模式可以有多型,而全靜態的類不能支援多型。
單例模式比靜態方法有很多優勢:
首先,單例可以繼承類,實現介面,而靜態類不能(可以整合類,但不能整合例項成員);
其次,單例類可以被整合,方法可以被覆寫。
ref:
靜態類和單例模式區別
單例模式限定為不是全用靜態函式實現的。1。使用的方便性 如果需要初始化工作,單例模式可以在建構函式裡面完成,全靜態函式的類需要乙個額外的函式來完成初始化工作,而且使用者如果沒有呼叫這個initialize函式,那麼後續的操作就會有問題,建構函式會被預設呼叫,所以使用起來比較簡單,對使用者做出了最少的...
靜態類和單例模式區別
觀點一 單例 單例模式比靜態方法有很多優勢 首先,單例可以繼承類,實現介面,而靜態類不能 可以整合類,但不能整合例項成員 其次,單例可以被延遲初始化,靜態類一般在第一次載入是初始化 再次,單例類可以被整合,他的方法可以被覆寫 最後,或許最重要的是,單例類可以被用於多型而無需強迫使用者只假定唯一的例項...
單例模式和靜態類的區別
1.首先明確一下,靜態成員並不是什麼程式載入時建立並初始化的,而是類載入時進行。類的載入是第一次真正用到它的時候 拿類new例項或呼叫它的靜態方法 進行的,而這個載入過程需要將 class 檔案中構成類的靜態和例項方法等類的成員的位元組碼指令一同載入到記憶體中,而後要為靜態域分配儲存空間並使用靜態塊...