在觀(guān)察者設(shè)計(jì)模式這種模式中,對(duì)象被表示為等待事件觸發(fā)的觀(guān)察者。 一旦發(fā)生指定的事件,觀(guān)察者就會(huì)關(guān)注該主體。 當(dāng)事件發(fā)生時(shí),主體告訴觀(guān)察者它已經(jīng)發(fā)生。
以下UML圖表示觀(guān)察者模式 -
現(xiàn)在讓我們來(lái)看看如何實(shí)現(xiàn)觀(guān)察者模式。參考以下實(shí)現(xiàn)代碼 -
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()
執(zhí)行上述程序生成以下輸出 -
解釋說(shuō)明
上面的代碼解釋了下載特定結(jié)果的過(guò)程。 根據(jù)觀(guān)察者模式邏輯,每個(gè)對(duì)象都被視為觀(guān)察者。 它在事件觸發(fā)時(shí)打印輸出。