#/usr/env/bin python
'''this is document'''
classEvent(object):'''事件初始化的一个方式'''
def __init__(self,event_type,data=None):
self._type=event_type
self._data=data
@propertydeftype(self):returnself._type
@propertydefdata(self):returnself._dataclassEventDispatcher(object):"""event分发类 监听和分发event事件"""
def __init__(self):#初始化事件
self._events =dict()def __del__(self):
self._events=Nonedefhas_listener(self,event_type,listener):if event_type inself._events.keys():return listener inself._events[event_type]else:returnFalsedefdispatch_event(self,event):"""Dispatch an instance of Event class"""
#分发event到所有关联的listener
if event.type inself._events.keys():
listeners=self._events[event.type]for listener inlisteners:
listener(event)defadd_event_listener(self,event_type,listener):#给某种事件类型添加listner
if notself.has_listener(event_type,listener):
listeners=self._events.get(event_type,[])
listeners.append(listener)
self._events[event_type]=listenersdefremove_event_listener(self,event_type,listener):ifself.has_listener(event_type,listener):
listeners=self._events[event_type]if len(listeners) == 1:delself._events[event_type]else:
listeners.remove(listener)
self._events[event_type]=listenersclassMyEvent(Event):
ASK= "askMyEvent"RESPOND= "respondMyEvent"
classWhoAsk(object):def __init__(self,event_dispatcher):
self.event_dispatcher=event_dispatcher
self.event_dispatcher.add_event_listener(
MyEvent.RESPOND,self.on_answer_event
)defask(self):print("who are listener to me?")
self.event_dispatcher.dispatch_event(MyEvent(MyEvent.ASK,self))defon_answer_event(self,event):print("receive event %s",event.data)classWhoRespond(object):def __init__(self,event_dispatcher):
self.event_dispatcher=event_dispatcher
self.event_dispatcher.add_event_listener(MyEvent.ASK,self.on_ask_event)defon_ask_event(self,event):
self.event_dispatcher.dispatch_event(MyEvent(MyEvent.RESPOND,self))
dispatcher=EventDispatcher()
who_ask=WhoAsk( dispatcher )
who_responde1=WhoRespond( dispatcher )
who_responde2=WhoRespond( dispatcher )#WhoAsk ask
who_ask.ask()