12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- Reference: http://www.slideshare.net/ishraqabd/publish-subscribe-model-overview-13368808
- Author: https://github.com/HanWenfang
- """
- class Provider:
- def __init__(self):
- self.subscribe_queue = {}
- self.msg_queue=[]
- def notify(self, msg):
- self.msg_queue.append(msg)
- def subscribe(self, msg, subscriber):
- if msg not in self.subscribers:
- self.subscribers[msg] = []
- self.subscribers[msg].append(subscriber) # unfair
- else:
- self.subscribers[msg].append(subscriber)
- def unsubscribe(self, msg, subscriber):
- self.subscribers[msg].remove(subscriber)
- if !self.subscribe[msg]:
- del self.subscribe[msg]
- def update(self):
- for msg in self.msg_queue:
- if msg in self.subscribers.keys():
- for suber in self.subscribers[msg]:
- suber.get(msg)
- self.msg_queue = []
- class Publisher:
- def __init__(self, msg_center):
- self.provider = msg_center
- def publish(self, msg):
- self.provider.notify(msg)
- class Subscriber:
- def __init__(self, name, msg_center):
- self.name = name
- self.provider = msg_center
- def subscribe(self, msg):
- self.provider.subscribe(msg, self)
- def get(self, msg):
- print("{} got {}".format(self.name, msg))
- def main():
- message_center = Provider()
- fftv = Publisher(message_center)
- jim = Subscriber("jim", message_center)
- jim.subscribe("cartoon")
- jack = Subscriber("jack", message_center)
- jack.subscribe("music")
- gee = Subscriber("gee", message_center)
- gee.subscribe("movie")
- fftv.publish("cartoon")
- fftv.publish("music")
- fftv.publish("ads")
- fftv.publish("movie")
- fftv.publish("cartoon")
- fftv.publish("cartoon")
- fftv.publish("movie")
- fftv.publish("blank")
- message_center.update()
- if __name__ == "__main__":
- main()
- ### OUTPUT ###
- # jim got cartoon
- # jack got music
- # gee got movie
- # jim got cartoon
- # jim got cartoon
- # gee got movie
|