我知道这听起来很重,但我正在尝试解决一个假设的情况。想象一下,你有N个对象的 N 个观察者。每个人都对对象状态感兴趣。当应用观察者模式时,可观察notify()|update()
对象倾向于通过调用观察者方法来遍历其观察者列表。
现在想象一个特定的观察者对可观察对象的状态有很多工作要做。例如,这会减慢最后一次通知的速度。
因此,为了避免减慢对所有观察者的通知速度,我们可以做的一件事是在单独的线程中通知观察者。为了让它工作,我想每个观察者都需要一个线程。这是我们为了避免因繁重的工作而导致通知速度变慢而承受的痛苦开销。如果使用线程方法,比减慢速度更糟糕的是无限循环导致的死线程。阅读经验丰富的程序员对于这一点将是很棒的。
- 在设计问题上有多年经验的人是怎么想的?
- 这是一个没有实质性解决方案的问题吗?
- 这真的是个坏主意吗?为什么?
例子
这是一个模糊的示例,以演示并希望澄清我什至没有测试过的基本思想:
class Observable(object):
def __init__(self):
self.queues = {}
def addObserver(self, observer):
if not observer in self.queues:
self.queues[observer] = Queue()
ot = ObserverThread(observer, self.queues[observer])
ot.start()
def removeObserver(self, observer):
if observer in self.queues:
self.queues[observer].put('die')
del self.queues[observer]
def notifyObservers(self, state):
for queue in self.queues.values():
queue.put(state)
class ObserverThread(Thread):
def __init__(self, observer, queue):
self.observer = observer
self.queue = queue
def run(self):
running = True
while running:
state = self.queue.get()
if state == 'die':
running = False
else:
self.observer.stateChanged(state)