Cocos2dx-lua實現單例設計模式

定義一個單例類


新建一個lua文件,命名爲MyDirector.lua,代碼以下:函數

module("MyDirector",package.seeall)

-- 成員變量
local instance = nil
print("load MyDirector")

-- 靜態方法(不須要傳self)
function getInstance()
	if instance == nil then
		instance = new(MyDirector)
		print("new MyDirector")
	end
	return instance
end

-- 非靜態方法(須要傳self)
function printName( self )
	print("my name is MyDirector")
end

tools.lua代碼以下:

-- 建立一個對象
function new( moduleName )
	local obj = {}
    setmetatable(obj,{__index = moduleName})
    return obj	
end

MyDirector模塊中有一個方法,判斷局部變量instance是否爲nil,若是爲nil則調用new函數返回一個元表__Index字段爲MyDirector的table(至關於建立一個對象),並賦值給instance,不然直接返回instance。


獲取類實例

調用代碼以下:ui

    require("src/tools")
    require("src/MyDirector")
    require("src/MyDirector")
    
    -- 獲取MyDirector類的實例    
    MyDirector.getInstance()    
    MyDirector.getInstance()
    -- 獲取MyDirector類的實例並調用其printName成員方法    
    MyDirector.getInstance():printName()


輸出結果以下:



從打印結果能夠看出只建立了一個MyDirector的實例,由於"new MyDirector"只打印了一次,但調用了兩次MyDirector的getInstance方法。lua

相關文章
相關標籤/搜索