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

来源:互联网 发布:淘宝去哪进货 编辑:程序博客网 时间:2024/05/03 17:59
--LUA对于观察者模式的实现--被观察者表Subject = {}--类似父类,具体对于lua面向对象编程思想学习看这里:--http://www.jb51.net/article/55724.htmfunction Subject:new(obj)obj = obj or {}setmetatable(obj, self)  --实例化对象指向Subject,这样就以Subject为模版了--将Father的__index字段指向自己,以便新对象在找不到指定的key时可以被重定向,即访问Father拥有的keyself.__index = selfendCreateSubject = Subject:new()--注册function CreateSubject:Add(obs)if self.observers == nil thenself.observers = {}endtable.insert(self.observers,obs)end--注销function CreateSubject:Del(obs)for k, v in pairs(self.observers) doif v == obs thentable.remove(self.observers,k)breakendendendfunction ConcreteSubject:Notify()for _, v in pairs(self.observers) dov:Update()endendObserve = {}function Observer:new(obj)obj = obj or {}setmetatable(obj,self)self.__index = selfreturn oendCreateObserver = Observer:new()function CreateObserver:new(s,n)obj = {}setmetatable(obj,self)self.__index = selfobj.subject = sobj.observername = nreturn objendfunction CreateObserver:Update() print(self.observername.."!!"..self.subject.subjectstate)ends = CreateSubject:Update()xiyangyang = CreateObserve:new(s,"喜羊羊")meiyangyang = CreateObserve:new(s,"美羊羊")lanyangyang = CreateObserve:new(s,"懒羊羊")s:Add(xiyangyang)s:Add(meiyangyang)s:Add(lanyangyang)s.subjectstate = "灰太狼来了快躲起来!"s.Notify()s:Del(lanyangyang)s.subjectstate = "灰太狼走了出来吧!"s:Notify()

0 0