您的位置:首页 > 编程语言 > Lua

Lua模仿类似观察者模式的监听变量改变自动刷新

2016-08-28 14:54 316 查看

Lua模仿类似观察者模式的监听变量改变自动刷新

最近一直在使用ulua做unity的UI相关,一个最大的问题就是界面刷新的方式。因为公司lua的架构MVC的方式做的不够理想,所以导致界面刷新上比较蛋疼,没有一个监听器来自动刷新界面,全部是手工控制界面刷新,工作效率低而且容易出BUG。

至于观察者模式就不详细说了,直接上代码。

local ValueClass = {}
ValueClass.__index = ValueClass

function ValueClass:ctor(name)
-- body
self.method = nil
self.value = nil
self.name = name
end

function ValueClass:setMethod(method)
-- body
self.method = method
end

function ValueClass:setValue(value)
-- body
if self.value ~= value then
self.value = value
self.method(self)
end
end

function ValueClass.New(name,fuc)
local self = {}
setmetatable(self,ValueClass)
self:ctor(name)
self.method = fuc
return self
end

return ValueClass`

使用:
AppConst.SocketPort = 2012
AppConst.SocketAddress = "127.0.0.1"
this.Value = ValueClass.New("AppConst.SocketAddress",handler(this,this.UpdateFun))
this.Value:setValue(AppConst.SocketAddress)

this.Value1 = ValueClass.New("AppConst.SocketPort",handler(this,this.UpdateFun))
this.Value:setValue(AppConst.SocketPort)

--测试valueClass
function Game:UpdateFun(Obj)
-- body
if Obj.name == "AppConst.SocketAddress" then
logWarn("------SocketAddress:UpdateFun:"..tostring(Obj.value))
elseif Obj.name == "AppConst.SocketPort" then
logWarn("------SocketPort:UpdateFun:"..tostring(Obj.value))
end
end


这里用到了一个handler,可以绑定函数。

function handler(Obj,method)
return function ( ... )
return method(Obj,...)
end
end


这样就可以在某个变量的值发生变化时,自动调用注册的刷新函数了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua unity