Учебники

Шаблоны проектирования Python — Наблюдатель

В этом шаблоне объекты представлены как наблюдатели, которые ждут события, чтобы вызвать. Наблюдатель присоединяется к субъекту, когда происходит указанное событие. Когда происходит событие, субъект сообщает наблюдателям, что оно произошло.

Следующая диаграмма UML представляет шаблон наблюдателя —

Шаблон наблюдателя

Как реализовать шаблон наблюдателя?

Давайте теперь посмотрим, как реализовать шаблон наблюдателя.

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()

Выход

Вышеуказанная программа генерирует следующий вывод —

Вывод паттерна наблюдателя

объяснение

Приведенный выше код объясняет процедуру загрузки конкретного результата. Согласно логике паттерна наблюдателя, каждый объект рассматривается как наблюдатель. Он печатает выходные данные, когда событие инициируется.