监听部分
-- 程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。
Event = {}
function Event:new(event)
local event = event or {}
setmetatable(event, self)
self.__index = self
return event
end
function Event:Instance()
if not self.instance then
self.instance = self:new()
self._listeners = {}
end
return self.instance
end
function Event:addEventListener(listener, eventType, callback)
-- assert(eventType)
-- assert(type(listener) == 'table')
-- assert(type(eventType) == 'string')
-- assert(type(callback) == 'function')
print(listener, eventType, callback)
if not self._listeners[eventType] then
self._listeners[eventType] = {}
end
self._listeners[eventType][listener] = callback
end
function Event:delEventListener(listener, evenType)
if not evenType then
for ev, es in pairs(self._listeners) do
es[listener] = nil
end
else
local es = self._listeners[evenType]
if es then
es[listener] = nil
end
end
end
function Event:dispatchEvent(eventType, ...)
if not self._listeners then return end
local callbacks = self._listeners[eventType]
if callbacks then
for listener, func in pairs(callbacks) do
listener[func](listener, ...)
end
end
end
调用部分
无参数
A = {}
function A:a()
local event = Event:Instance()
event:addEventListener(self, 'eat', 'getName')
end
function A:getName()
print("aaaaaaaaaaaaaaaaaaaaaaaaa")
end
function A:set()
local event = Event:Instance()
event:dispatchEvent('eat')
end
A:a()--创建监听
A:set()--分发事件
输出:aaaaaaaaaaaaaaaaaaaaaaaaa
有参数
A = {}
function A:a()
local event = Event:Instance()
event:addEventListener(self, 'eat', 'getName')
end
function A:getName(obj)
print(obj)
end
function A:set(obj)
local event = Event:Instance()
event:dispatchEvent('eat',obj)
end
A:a()--创建监听
A:set("11111")--分发事件
输出:11111