В этом шаблоне объекты представлены как наблюдатели, которые ждут события, чтобы вызвать. Наблюдатель присоединяется к субъекту, когда происходит указанное событие. Когда происходит событие, субъект сообщает наблюдателям, что оно произошло.
Следующая диаграмма 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()
Выход
Вышеуказанная программа генерирует следующий вывод —
объяснение
Приведенный выше код объясняет процедуру загрузки конкретного результата. Согласно логике паттерна наблюдателя, каждый объект рассматривается как наблюдатель. Он печатает выходные данные, когда событие инициируется.