1.描寫敘述:
這個模式是非常有意思,並且比較簡單,可是我還是要說由於它使用的是如此的廣泛,如此的有人緣,單例就是單一、獨苗的意思,那什么是獨一份呢?
你的思維是獨一份,除此之外還有什么不能山寨的呢?
我們舉個比較難復制的對象:皇帝。
中國的歷史上非常少出現兩個皇帝並存的時期,是有,但不多,那我們就覺得皇帝是個單例模式,在這個場景中,有皇帝,有大臣,大臣是天天要上朝參見皇帝的,今天參拜的皇帝應該和昨天、前天的一樣(過渡期的不考慮,別找茬哦),大臣磕完頭,抬頭一看,嗨,還是昨天那個皇帝,單例模式,絕對的單例模式,先看類圖:
凝視:
main()。大臣
CEmperor。須要單例的類
說明:非常多大臣拜見的皇帝,僅僅有一個。
體如今面向對象方面,CEmperor定義一個靜態指針,和一個靜態函數,私有化構造函數、析構函數、構造函數復制、重載賦值語句。
注意:線程安全,採用相互排斥體的方式實現。
2. 代碼:
Emperor = {}
function Emperor:new(o)
o = o or {}
setmetatable(o,self)
self.__index = self
return o
end
function Emperor:GetInstance()
if self.m_pEmperor == nil then
self.m_pEmperor = self:new()
end
return self.m_pEmperor
end
function Emperor:ReleaseInstance()
if self.m_pEmperor then
self.m_pEmperor = nil
end
end
function Emperor:EmperorInfo()
print("皇帝某年某日", os.date("%X", os.time()))
end
--- main ---
function main()
pEmperor1 = Emperor:GetInstance()
pEmperor1:EmperorInfo()
pEmperor2 = Emperor:GetInstance()
pEmperor2:EmperorInfo()
if pEmperor1 == pEmperor2 then
print("大家都是天天要上朝參見同個皇帝!")
end
end
main()
執行結果,例如以下:

