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
这样就可以在某个变量的值发生变化时,自动调用注册的刷新函数了。
相关文章推荐
- 设计模式--观察者(监听)设计模式
- E4 RCP 属性改变监听器模式
- java设计模式--事件监听器模式和观察者模式
- Android 中的监听器模式与观察者模式
- 详解java的事件监听机制和观察者设计模式
- 观察者模式(状态改变-通知-更新行为)
- java设计模式--事件监听器模式和观察者模式
- iOS中利用委托和观察者模式实现变量回调和方法回调
- java设计模式--事件监听器模式和观察者模式 .
- Android 中的监听器模式与观察者模式
- Android 中的监听器模式与观察者模式
- Flex中监听变量是否发生改变的方法
- 观察者模式的理解(感觉还好,有时间看下 Button的监听过程)
- 设计模式--观察者(监听)设计模式
- Android 中的监听器模式与观察者模式
- 【设计模式】observer观察者模式:模拟java.awt.Button事件监听。
- JS之 函数模仿块级作用域,私有变量,模块模式
- 观察者模式 模仿新浪微博的更新模式写的小DEMO
- js监听和观察者模式
- 策略设计模式:父类持有接口成员变量,动态设定接口成员实现类,动态改变方法