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

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

这样就可以在某个变量的值发生变化时,自动调用注册的刷新函数了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值