請考慮我們有一個名爲Foo的類,它在準備就緒時觸發「就緒」事件。動態事件條件
from observer import SubjectSet
class Foo:
def __init__(self):
self.events = SubjectSet()
self.events.create('ready')
def do_sth(self):
self.events.fire('ready')
正如你看到的,do_sth方法使Foo類的準備情況。但是,子類將要添加新的任務/條件,必須在發出準備好的事件之前完成。
爲了解決這個問題,我編寫了一套名爲TaskPool,Task,ObserverTask的新類。他們正在使用的Foo類是這樣的:
from observer import SubjectSet
from taskpool import TaskPool, ObserverTask
class Foo:
def __init__(self):
self.events = SubjectSet()
self.events.create('task1')
self.events.create('task2')
self.events.create('ready')
task1 = ObserverTask(self.events.get('task1'))
task1 = ObserverTask(self.events.get('task2'))
self.tasks = TaskPool()
self.tasks.append(task1, task2)
self.tasks.events.add_listener('success',self.events.subjects.ready.emit)
def complete_task1(self):
self.events.fire('task1')
def complete_task2(self):
self.events.fire('task2')
現在,它觸發「準備就緒」事件時,它的taskpool火災「成功」事件。正如您所期望的那樣,將擴展Foo的類可以定義在啓動ready事件之前必須完成的新任務。順便說一下,幾乎所有的任務都是異步的。
您認爲這是一個很好的解決方案嗎?我一直在尋找更好的解決方案,但我想我不知道正確的搜索詞組。
謝謝。