Вы можете легко создать шаблон, управляемый событиями. Следующий псевдокод иллюстрирует один подход.
abstract class EventTemplate<T> implements Runnable {
private BlockingQueue<T> queue;
public void submit(Callable<T> callable) {
queue.add(callable);
}
public abstract void handleEvent(T t);
public void run() {
for(;;) handleEvent(queue.take());
}
public void start() {
new Thread(this).start();
}
}
Классы могут расширять шаблон
class FooEventHandler extends EventTemplate<Foo> {
public void handleEvent(Foo foo) {
// do something
}
}
Который может быть создан
new FooEventHandler().start();