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.