今天老師講了單件模式,這個模式比較容易學,就開始講這個。
不過俺至今還沒發現它有什麼特殊用途,雖然,在網上有搜到一些資料關於它的用處。
這個模式充分利用了私有的建構函式來解決其他類不能new它,也就是不能例項化它。造成了只有乙個物件的情況,在某些設計下,只允許乙個物件存在的情況,就使用該模式是最佳選擇(當然最好也是在單執行緒下)
還有就是在singleton模式下,是不能讓類序列化它,即不能加serilizable屬性。那樣也可能會造成多物件的情況,還有就是不能支援iconeable介面,就是不能轉殖。這個問題顯而易見。。。nonsense
在這裡我說說為什麼單件模式在多執行緒下不爽。
1 但乙個執行緒走到 if(thisobject != null)這個判斷條件的時候,可能正在這個時候cpu的時間片轉移給了另外的執行緒,但在cpu還沒有將時間片轉移給執行緒一的時候,它有執行了另外乙個執行緒,啟用了 if(thisobject != null)這個判斷條件並判別為true了,這樣一來,當cpu分別把時間片轉交給執行緒一和執行緒二的時候,他們兩個執行緒均已經執行完了判斷條件,都會認為是true,所以執行下面的語句:new thisobject();悲劇也就發生了。。。。
關於單件模式在多執行緒下的解決辦法,老師說的是用lock,但在講課的時候好像沒有成功,他想lock這個物件,但物件其實還沒有建立成功,怎麼lock?
不過,解決的辦法還是有的。。。。可以lock靜態變數,加上typeof,呵呵,或者是增添乙個object,這個是專門為這個鎖機制而建立的,沒別的用,或者是做乙個靜態的唯讀變數。。。。不過俺沒試過,不知道怎麼檢查多執行緒下的執行,是怎麼怎麼滴。。。。
設計模式之Singleton
在很多時候,我們出於效能考慮,我們不希望反覆的例項化同乙個物件,而只對該物件例項一次,而所有需要用到該物件的地方都是引用同乙個類。singleton模式就可以達到這樣的目標,它得實現意圖便是確保乙個類只有乙個例項,並且為之提供乙個全域性的訪問點。而下面的 便很好說明了如何實現單例模式 該段 值得注意...
設計模式之Singleton模式
保證類只有乙個物件例項,並提供乙個訪問它的全域性訪問點 只有乙個物件例項 提供乙個全域性訪問點 執行緒安全 在c 11之後,通過靜態區域性成員變數的特性來實現單例模式 第一次呼叫getinstance例項化靜態區域性成員變數instance之後每次呼叫getinstance都是返回第一次例項化的in...
C 設計模式之Singleton模式
singleton是二十三個設計模式中比較重要也比較經常使用的模式。但是這個模式雖然簡單,實現起來也會有一些小坑,讓我們一起來看看吧!首先我們看看這個設計模式的uml類圖。很清晰的可以看到,有三點是需要我們在實現這個模式的時候注意的地方。其中,私有化構造器是防止外部使用者建立新的例項而靜態方法用於返...