--事件系统 ---------------------------------- local EventSystem = class("EventSystem") function EventSystem:ctor() self._eventBus = {} end -- _eventBus[eventName][tag] = listener function EventSystem:regEvent(eventName,listener,tag) print(eventName,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 成功! ]]",tag) else printf("[[通知中心 %s 注销 %s 失败! ]]",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观察者模式
原文地址:https://www.jb51.cc/cocos2dx/338455.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。