保持單一物件有時非常必要,尤其是資源類,比如視窗資源,登錄檔等等,所謂的單件模式的定義是:確保乙個類只有乙個例項,並提供乙個全域性的訪問點。其類圖雖說比較簡單,但單例模式還是有很多陷阱的。
首先,給出單例模式的經典的懶漢式寫法:(懶漢式:需要例項物件時才建立,延遲建立)
class single
pubilc static single getinstance() //獲取例項的介面函式
}
通過設計上面的類,我們要獲取該類的物件就必須呼叫getinstance()函式,通過內部判斷就可以得到乙個物件了(在全域性範圍內只只存在乙個物件),但是上面的**並不是完美的,尤其是在多執行緒中會出現意想不到的「狀況」:我們需要加多執行緒同步。
修改獲取例項的函式如下:
pubilc static synchronized single getinstance() //加上同步**塊的例項獲取函式
但收之桑榆,失之東隅,我們加了同步**塊後會拖慢執行效率,而且我們只需要在第一次執行該方法時才需要同步,之後每次同步都是無用功,所以我們需要改進**(如果你的例項獲取的次數不是很多,而且對效能也沒什麼嚴格的要求,當然也就無所謂了):
另乙個經典的單例方式:餓漢式,呼叫之前就初始化乙個例項,以後需要就直接呼叫。
class single
pubilc static single getinstance() //獲取例項的介面函式
}
jvm虛擬機器在任何執行緒訪問
uniqueinstance靜態變數之前一定建立此例項。
我們也可以運用雙重加鎖的方式,在getinstance()中減少**使用同步:
class single
pubilc static single getinstance() //獲取例項的介面函式
return uniqueinstance;}}
}
如上就是單例模式的大概內容。 設計模式 單件模式
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 單件模式是用來保證共有資源唯一性的設計模式,舉個例子吧,假如我們是藝人,我們在同乙個經紀人的協助下開展工作,我們可以委託這個經紀人做一些事情,但是我們不能委託經紀人在幫你做報表的同時幫我訂外賣。用程式猿的語言來表達就是,我們可能在多處地方持有對同一資源的引用。由...
設計模式 單件模式
單件模式 singleton 也叫單例模式,是一種建立型模式。它確保乙個類只有乙個例項,並提供全域性訪問。singleton中uniqueinstance類變數持有唯一的單件例項,getinstance 是靜態方法,可以通過類名在任何需要的地方使用它,與訪問全域性變數一樣,但是可以延遲例項化。餓漢式...