Python设计模式 观察者


在这种模式中,对象被表示为等待事件触发的观察者。一旦指定的事件发生,观察者就会依附于主题。当事件发生时,主体告诉观察者它已经发生了。

下面的 UML 图表示观察者模式:

Observer Pattern

如何实现观察者模式?


现在让我们看看如何实现观察者模式。

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

上述程序产生如下输出:

Observer Pattern 输出

解释

上面的代码解释了下载特定结果的过程。根据观察者模式逻辑,每个对象都被视为观察者。它在触发事件时打印输出。