Wzorce projektowe w Pythonie - obserwator
W tym wzorcu obiekty są reprezentowane jako obserwatory, które czekają na wyzwolenie zdarzenia. Obserwator przyłącza się do podmiotu, gdy wystąpi określone zdarzenie. Gdy zdarzenie ma miejsce, podmiot mówi obserwatorom, że nastąpiło.
Poniższy diagram UML przedstawia wzorzec obserwatora -
Jak zaimplementować wzorzec obserwatora?
Zobaczmy teraz, jak zaimplementować wzorzec obserwatora.
import threading
import time
import pdb
class Downloader(threading.Thread):
def run(self):
print 'downloading'
for i in range(1,5):
self.i = i
time.sleep(2)
print 'unfunf'
return 'hello world'
class Worker(threading.Thread):
def run(self):
for i in range(1,5):
print 'worker running: %i (%i)' % (i, t.i)
time.sleep(1)
t.join()
print 'done'
t = Downloader()
t.start()
time.sleep(1)
t1 = Worker()
t1.start()
t2 = Worker()
t2.start()
t3 = Worker()
t3.start()
Wynik
Powyższy program generuje następujące dane wyjściowe -
Wyjaśnienie
Powyższy kod wyjaśnia procedurę pobierania konkretnego wyniku. Zgodnie z logiką wzorca obserwatora, każdy obiekt jest traktowany jako obserwator. Drukuje dane wyjściowe po wyzwoleniu zdarzenia.