設計模式實例(Lua)筆記之三(Singleton單例模式)


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()


執行結果,例如以下




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM