單例模式辨析

2021-06-21 12:27:21 字數 1634 閱讀 1747

描述:單例模式,在整個程式的執行過程中,自始自終只有乙個物件的例項。

1.單例模式的用途

如乙個登錄檔設定的物件,我們不希望這樣的物件有多份拷貝!否則那樣會把

設定搞的一團糟。常常被用來管理共享的資源,還有如:資料庫連線或者執行緒池。

2.單例模式思考1

乙個全域性變數也可以保證乙個物件只有乙個例項,那為什麼還要使用單例模式來實現呢?試想一下,你要用全域性變數的話,那是不是你需要講全域性變數進行初始化,如果初始化的東西非常浪費資源且在實際中又不會用到初始化的東西。那豈不是浪費資源嗎? 是時候考慮單例模式了。單例模式可以使我們在需要的時候才去初始化物件(具體實現參考下面的

單例模式實現1

)。3.特殊情況

遺憾的是,在多執行緒的情況下單例模式就失效了,多個執行緒會返回多個物件例項。要保證還是是只返回乙個物件,那我們就要讓多個執行緒像排隊一樣依次進入

getinstance() 方法,即:只有當乙個執行緒跳出該方法後另乙個執行緒才能進入該方法。這樣就能保證只有乙個物件返回了。具體做法是將方法宣告為:

synchronized

如下:public    class     singleton 

//構造器為私有,只有

singleton類本身才能例項化自己

public   static   

synchronized

singleton   get

instance()

return   uniqueinstance;}}

但加上synchronized

後 程式的執行效率要低很多。如果多執行緒訪問此方法頻繁的話,將會大大的降低程式執行效率,所以就要改變單例模式的實現方式:不受多執行緒控制,即:每個執行緒一開始就能得到乙個物件的例項(和全域性變數的實現方式差不多)。具體的實現就是下面的

.單例模式實現2

,所以具體選擇那種單例模式實現方式,要根據實際情況來決定。

2.單例模式實現1

public    class     singleton 

//構造器為私有,只有

singleton類本身才能例項化自己

public   static   

singleton   get

instance()

return   uniqueinstance;}}

3.單例模式實現2

public    class     singleton 

//構造器為私有,只有

singleton類本身才能例項化自己

public   static   

singleton   get

instance()

}

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

單例模式 懶漢式單例模式

單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...