Учтите, что у нас есть класс с именем Foo, который запускает событие "ready", когда оно готово.
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. Но подклассы захотят добавить новые задачи / условия, которые необходимо выполнить, прежде чем выдать событие ready.
Чтобы решить эту проблему, я кодировал набор новых классов с именами 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')
Теперь он запускает событие «Ready», когда его пул задач запускает событие «Success». Как и следовало ожидать, классы, которые будут расширять Foo, могут определять новые задачи, которые должны быть выполнены до запуска события ready. Кстати, почти все задачи асинхронные.
Как вы думаете, это хорошее решение проблемы? Я искал лучшие решения, но, похоже, я не знаю правильной поисковой фразы.
Спасибо.