設計模式(Design Pattern) – Singleton (單例模式)

目的

確保類別只會有一個物件實體存在,並提供單一存取窗口。


動機

有時我們只想要一個物件實體 : 

  • 只會有一個列印佇列(print spooler)為所有的印表機服務

比較好的做法,就是類別自己負責,讓自己只會有一個實體。

 


範例

參與者

  • Singletion : 唯一的 Instance ,讓外界只能存取他唯一的實體

所以類別可以定義成 : 

Protected Contructor可以避免該類別在其他地方被實體化, 所以其他地方呼叫時就無法使用 new 將他實體化

只能使用 GetSingletion 存取該實體,所以就能確保只有一個實體 : 

 


多執行緒 – 雙重鎖定

在多執行緒,你可能需要確保只有一個實體化對象

但可能很巧的,同時有兩支以上的執行緒剛好都執行到 uniqueInstance,所以導致程式錯亂。

雙重鎖定就是在 lock 裡面多判斷一次,讓機率降低 :

print

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *