1. 程式人生 > >Cocos2dx-lua實現單例設計模式

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。

獲取類例項

呼叫程式碼如下:

    require("src/tools")
    require("src/MyDirector")
    require("src/MyDirector")
    
    -- 獲取MyDirector類的例項    
    MyDirector.getInstance()    
    MyDirector.getInstance()
    -- 獲取MyDirector類的例項並呼叫其printName成員方法    
    MyDirector.getInstance():printName()
輸出結果如下:


從列印結果可以看出只建立了一個MyDirector的例項,因為"new MyDirector"只打印了一次,但呼叫了兩次MyDirector的getInstance方法。