--事件系统----------------------------------local EventSystem = class("EventSystem")function EventSystem:ctor() self._eventBus = {}end-- _eventBus[eventName][tag] = listenerfunction EventSystem:regEvent(eventName,listener,tag) print(eve
--事件系统 ---------------------------------- local EventSystem = class("EventSystem") function EventSystem:ctor() self._eventBus = {} end -- _eventBus[eventName][tag] = listener function EventSystem:regEvent(eventName,listener,tag) print(eventName,listener,tag) if type(eventName) == "string" and type(listener) == "function" then if not self._eventBus[eventName] then self._eventBus[eventName] = {} end tag = tag .. '' self._eventBus[eventName][tag] = listener printf("[[通知中心 %s 注册 %s 成功! ]]", eventName, tag) else printf("[[通知中心 %s 注册 %s 失败! ]]", tostring(eventName),tag .. '') end end function EventSystem:postEvent(eventName,data) assert(eventName, "EventSystem:postEvent eventName = nil") local target = self._eventBus[eventName] if not target then printf("[[通知中心 %s 不存在! ]]", eventName) return end local event = { eventName = eventName, tag = nil, data = data } if target then for _tag,v in pairs(target) do printf("[[通知中心 向 %s 发送 %s 成功! ]]", _tag, event.eventName) event.tag = _tag v( event ) end end end function EventSystem:unRegEvent(eventName,tag) if self._eventBus[eventName] then tag = tag .. '' self._eventBus[eventName][tag] = nil printf("[[通知中心 %s 注销 %s 成功! ]]", eventName, tag) else printf("[[通知中心 %s 注销 %s 失败! ]]", eventName, tag) end end function EventSystem:unRegEventByName(eventName) if self._eventBus[eventName] then self._eventBus[eventName] = nil printf("[[通知中心 %s 注销成功! ]]", eventName) else printf("[[通知中心 %s 注销失败! ]]", eventName) end end function EventSystem:hasEventListenerByName(eventName) local t = self._eventBus[eventName] if not t then return false end for _,__ in pairs(t) do return true end return false end function EventSystem:hasEventListener(eventName,tag) return (not self._eventBus[eventName][tag .. '']) end function EventSystem:removeAllEventListeners() self._eventBus = {} end function EventSystem:dumpAllEventListeners() print("---- EventSystem:dumpAllEventListeners() ----begin") for name, listeners in pairs(self._eventBus) do printf("-- event: %s", name) for tag, listener in pairs(listeners) do printf("-- tag: %s, listener: %s", tostring(tag), tostring(listener)) end end print("---- EventSystem:dumpAllEventListeners() ----end") end return EventSystem
[设计模式]Observer观察者模式