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

原创 2016年08月28日 14:54:38

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接入笔记06--按钮事件监听及消息分发

按钮事件监听NGUI一般常用的是UIEvenetListener,使用方法一般如下UIEventListener.Get(gameObject).onClick = BtnClick;在Lua代码中使...

EXTJS 如何实现类似comet 异步刷新grid(自动刷新)

原理:变更思路,通过客户端解决问题。知识要点1.在Ext.data.Store中添加刷新数据的计划任务。2.在beforeload中设置控制参数。3.grid绑定静态的Store,该Store不和服务...

iOS-OC-监听网络状态,有网时数据自动刷新

我监听网络状况用的是AFNetNetWorking,你可以用其他的方法,原理都一样;我所有的控制器都继承于基类控制器; 1.监听网络 #pragma mark - 监测网络状态 - (void)m...

IOC 与 好莱坞原则(和回调和观察者模式比较类似)

nversion of Control(控制反转,IoC) 大家可能已经知道好莱坞(Hollywood)原则: Don’t call us, we’ll call you. ...

观察者模式(事件监听实现)

可能在程序中,我们需要在某些数据变化时,其他的类做出一些响应,我们总不能开一个线程,每隔一段时间就去检测数据有没有发生变化吧,那样效率很低,我们更希望那些具有变化属性的类能够主动将自己的变化推送给,希...

观察者模式的理解(感觉还好,有时间看下 Button的监听过程)

监听的接口: 3个待实现的方法 public interface Subject { public void attach(Observer observer); public void ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)