Cocos2dx-lua實現單例設計模式
阿新 • • 發佈:2019-02-01
定義一個單例類
新建一個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方法。