47 lines
1.0 KiB
Lua
47 lines
1.0 KiB
Lua
---
|
|
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
|
--- 对象缓存池
|
|
--- DateTime: 2018/5/9 11:14
|
|
---
|
|
|
|
local ObjectPool = {};
|
|
ObjectPool.__index = ObjectPool
|
|
|
|
--构造函数
|
|
--@template:对象模版
|
|
--@actionOnGet:获取对象回调
|
|
--@actionOnRelease:回收对象回调
|
|
function ObjectPool:New(template,actionOnGet,actionOnRelease)
|
|
local self = {};
|
|
setmetatable(self, ObjectPool);
|
|
self.actionOnGet = actionOnGet;
|
|
self.actionOnRelease = actionOnRelease;
|
|
self.template = template;
|
|
self.stack = list:new();
|
|
return self;
|
|
end
|
|
|
|
|
|
--获取对象
|
|
function ObjectPool:Get()
|
|
local element;
|
|
if(self.stack.length ==0) then
|
|
element = self.template:new();
|
|
else
|
|
element = self.stack:pop();
|
|
end
|
|
if(self.actionOnGet~= nil) then
|
|
self.actionOnGet(element)
|
|
end;
|
|
return element;
|
|
end
|
|
|
|
--回收对象
|
|
function ObjectPool:Release(element)
|
|
if(self.actionOnRelease ~= nil) then
|
|
self.actionOnRelease(element);
|
|
end
|
|
self.stack.push(element);
|
|
end
|
|
|
|
return ObjectPool |