Python 观察者模式
在这种模式下,对象被表示为等待事件触发的观察者。一旦发生指定的事件,观察者将附加到主题上。事件发生时,受试者会告诉观察者事件已经发生。
以下UML图表示观察者模式:
如何实现观察者模式?
现在让我们看看如何实现观察者模式。
# Filename : example.py # Date : 2020-08-22 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()
输出
上面的程序生成以下输出:
# Filename : example.py # Date : 2020-08-22 downloading worker running: 1 (1) worker running: 1 (1) worker running: 1 (1) unfunf unfunf unfunf unfunf done worker running: 2 (4) done worker running: 2 (4) done worker running: 2 (4) donedone worker running: 3 (4) done worker running: 3 (4) worker running: 3 (4) done worker running: 4 (4)done worker running: 4 (4) done worker running: 4 (4) done done done
说明
上面的代码说明了下载特定结果的过程。根据观察者模式逻辑,每个对象都被视为观察者。当事件被触发时,它将打印输出。
它为状态机提供了一个模块,该模块使用从指定状态机类派生的子类实现。这些方法与状态无关,并导致使用装饰器声明转换。 如何实现状态模式?状态模式的基本实现如下所示:# Filename : example.py ...