Posted on 2008-05-22 00:09
Herbert 閱讀(591)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
設(shè)計(jì)模式
Singleton(單件) 模式:
保證一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。
假設(shè)有一個(gè)太陽(yáng)類 Sun:
這樣,當(dāng)有另外一個(gè)類的對(duì)象調(diào)用Sun 類的 GetInstance() 方法時(shí),它只會(huì)返回唯一一個(gè)Sun對(duì)象。當(dāng)有些類要被頻繁地調(diào)用時(shí),如果每次調(diào)用都要進(jìn)行實(shí)例化,那開(kāi)銷是十分大的,這時(shí)候我們就可以考慮一下用這個(gè)模式。然而這個(gè)模式只適用于但線程,如果用于多線程,兩個(gè)或以上的對(duì)象同時(shí)調(diào)用這個(gè)實(shí)例的時(shí)候,就會(huì)涉及到線程互斥的問(wèn)題了。
把Singleton模式修改一下,使它適合用于多線程,這就是Double Checked Locking 模式所要解決的問(wèn)題。
只需要在 GetInstance()方法里面改一下,加一段線程互斥處理的代碼,其它不變。