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实现

--[[ 抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里, 每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对 象,主题角色...

【Lua】观察者模式在Lua中的实现

--LUA对于观察者模式的实现 --被观察者表 Subject = {} --类似父类,具体对于lua面向对象编程思想学习看这里: --http://www.jb51.net/article/557...
  • poda_
  • poda_
  • 2016年02月01日 11:13
  • 592

利用观察者模式实现Cocos2DX-lua游戏中的消息管理系统

游戏中某些对象往往需要及时获知其他特定对象状体的改变。为降低类之间的耦合度,可以建立消息管理系统,实现消息的集中与分发。观察者(也叫发布-订阅)模式很容易实现这套系统。观察者模式是一种比较成熟的设计模...

《23种设计模式 Lua篇》 - 观察者模式

当观察哨发现入侵者,通知正在上班的警卫。

利用lua的元表追踪table变量的变化

在项目开发过程中遇到一个bug,和全局table中的一个变量有关,但是这个变量在多个文件中有修改,看代码追踪这个变量具体在那个地方被修改了,结果看到晕,也没有找到问题。后来在想有什么简单的方法没有,就...

C++对Lua中table进行读取、修改和创建

C++对Lua中table进行读取、修改和创建

通过Lua彻底明白了回调函数

Lua回调函数实例 local m = {} local list = {name="hello",age=12} m.call_back_fun_print = function(printID)...

项目后期Lua接入笔记06--按钮事件监听及消息分发

按钮事件监听NGUI一般常用的是UIEvenetListener,使用方法一般如下UIEventListener.Get(gameObject).onClick = BtnClick;在Lua代码中使...
  • suifcd
  • suifcd
  • 2017年03月30日 20:31
  • 774

android通过观察者模式实现更新UI

观察者模式: §定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 相信大家对观察者模式应该不陌生。。就不多介绍啦,上代码: /**...
  • jycboy
  • jycboy
  • 2015年05月27日 00:46
  • 889

Android用观察者模式代替广播通知刷新界面

Java Android用接口回调发送广播通知。
  • csm_qz
  • csm_qz
  • 2015年06月11日 20:37
  • 4061
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lua模仿类似观察者模式的监听变量改变自动刷新
举报原因:
原因补充:

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