設計模式 單件模式

2022-02-15 13:10:22 字數 1436 閱讀 3619

單件模式:

確保乙個類只有乙個例項,並提供乙個全域性的訪問點.

通常我們可以讓乙個全域性變數使得乙個物件被訪問,但它不能防止你例項化多個物件,乙個最好的辦法就是讓類自身負責儲存它的唯一例項.這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法.

singleton:單獨的

結構圖:

實現1:

public

sealed

class singleton

public

static singleton getinstance()

return single;}}

此種實現是不安全的,當有多個執行緒去訪問時,會同時得到single==null為true.此時會得到singleton的兩個例項.

實現2:

public

sealed

class singleton

public

static singleton getinstance()

}return single;}}

此種實現對執行緒來說也是安全的,但是,每次訪問之前,都需要加鎖判斷,此時會消耗大量的系統資源.所以,採用雙重加鎖的方式來進行設計.
實現3:
public

sealed

class singleton

public

static singleton getinstance()}}

return single;}}

優點:

singleton會保證只有此類只有乙個例項,保證所有引用均引用自此例項

修改很方便,只需修改一處,即可保證全盤更新

缺點:

每次生成例項之前需要判斷該例項是否存在

適用場景:

當類有且只有乙個例項時,可以使用singleton模式. 

解釋:

lock:lock是確保乙個執行緒位於**的臨界區時,另乙個執行緒不能進入該臨界區,如果其它執行緒試圖進入鎖定的**,則它將一直等待,直到該物件被釋放.

設計模式 單件模式

1 1 singleton.h ifndef singleton h define singleton h include using namespace std class singleton 構構函式,防止拷貝構造另乙個例項,作為protected singleton 析構函式,作為protec...

設計模式 單件模式

2015年1月29日16 02 59 單件模式是用來保證共有資源唯一性的設計模式,舉個例子吧,假如我們是藝人,我們在同乙個經紀人的協助下開展工作,我們可以委託這個經紀人做一些事情,但是我們不能委託經紀人在幫你做報表的同時幫我訂外賣。用程式猿的語言來表達就是,我們可能在多處地方持有對同一資源的引用。由...

設計模式 單件模式

保持單一物件有時非常必要,尤其是資源類,比如視窗資源,登錄檔等等,所謂的單件模式的定義是 確保乙個類只有乙個例項,並提供乙個全域性的訪問點。其類圖雖說比較簡單,但單例模式還是有很多陷阱的。首先,給出單例模式的經典的懶漢式寫法 懶漢式 需要例項物件時才建立,延遲建立 class single pubi...