設計模式之二 單例模式

2021-08-15 19:57:41 字數 1634 閱讀 4001

單例模式是工作中經常用的一種設計模式, 其主要用於設計程式中公共使用的部分, 下面是三種常用常見的三個寫法:

第一種: 執行緒安全不懶漢模式

public class 

singleton

public static

singleton

getinstance

() return

instance;}

}

優點:  容易理解單例模式,適用於單執行緒程式.

缺點: 執行緒不安全(比如某個執行緒a 判斷if(intstance == null) 後該任務時間片到了,作業系統做別的事情後 再回來就會直接new 新的例項, 而此時, 可能已經有新的例項了),容易出現new 出多個例項的情況,不適用於多執行緒程式.

第二種: 執行緒安全的懶漢模式

public class 

firstinstancealgori

public static

firstinstancealgori

getinstance

() return

minstance;}

}}

優點:  基於第二種得來, 解決了第一種的執行緒安全問題, 多執行緒中可以正常執行.

缺點:  效率比較低(因為無論單例是否被建立, 都給物件加鎖了,)

第三種: 雙重檢驗鎖單例模式

public static int 

initialvalue

= 100

;private static

firstinstancealgori

minstance

;private firstinstancealgori()

public static

firstinstancealgori

getinstance

() return

minstance;}

}}}

優點: 基於第二種得來, 執行緒安全, 效率提高了.

缺點: 後面補充,

需要理解單例設計模式的設計思想, 這樣在實際寫**的過程中,  才能比較有底.

個人是這麼理解的:

1. 類的建構函式要是私有.

在**中,單例模式作用的物件是類, 類的建構函式是不能被外面的物件呼叫的(不然是實現不了單例).

2.對外介面必須是靜態的.

為了供外部呼叫, 又不能被外部建立物件(呼叫類中方法有兩種方法,

(1)建立物件,直接呼叫,new person().function().

(2) 用.靜態方法才能這樣  ). 所以只能選第二種.

3.宣告單例變數的時候要是靜態.

因為對外介面是靜態的, 靜態方法只能訪問靜態的成員變數. (因為靜態函式的生命週期更長, 編譯的時候就佔空間,此時非靜態變數還沒有生出來).

設計模式學習筆記之二 單例模式

單例模式,顧名思義就是讓乙個類在執行過程中只有乙個例項。public class singleton 靜態工廠方法,返回此類的唯一例項 public static singleton getinstance return singleton 加鎖是為了防止多執行緒同時呼叫時,new出多個例項 在加鎖...

設計模式 二 單例模式

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...

設計模式(二) 單例模式

單例模式 用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。經典單例模式 public class singleinstance public static singleinstance geti...