Java, шаблон проектирования: несколько источников событий и один обработчик событий - PullRequest
7 голосов
/ 04 июня 2010

Я хочу реализовать дизайн на Java, где у меня есть несколько источников событий (потоков). Такой источник событий выполняет определенную задачу и должен уведомить уникальный обработчик событий (класс), а этот должен выполнять другие задачи в соответствии с уведомлениями источников событий.

У меня вопрос: как правильно реализовать этот дизайн в Java? Есть шаблон дизайна, похожий на этот дизайн?

Заранее спасибо:).

Ответы [ 5 ]

3 голосов
/ 04 июня 2010

Я думаю, вы ищете шаблон Observer . Java имеет некоторые стандартные интерфейсы (java.util.Observer, java.util.Observable), хотя они не зависят от типа; так что вы можете рассмотреть свой собственный, если домен, кажется, требует этого.

class MyThread implements Runnable {
 Observable observable;

 public MyThread(EventHandler observer) {
  observable = new Observable();
  observable.addObserver(observer);
 }

 public void run() {
  while (!done())  {
   Object result = doStuff();
   observable.notifyObservers(result);
  }
 }
}

// might have this be singleton
class EventHandler implements Observer {
 public synchronized void update(Observable o, Object arg) {
  accomplishOtherTask();
 }
}
0 голосов
/ 07 января 2011

Наблюдаемый шаблон не имеет мнения о потоке. В шаблон EventThread слушатель может указать, в каком потоке и когда обрабатывается событие.

public class MyObservableObject {
    ...
    void addListener(MyListener listener, Executor executor);
}
public interface MyListener {
    void onEvent(Object sender, Object event);
}

// Example
obj.addListener( myListener, CURRENT_THREAD );
obj.addListener( myListener, myWorkQueue );
obj.addListener( myListener, AWT_EDT ); // or SWT_EDT
obj.addListener( myListener, Executors.newSingleThreadScheduledExecutor() );
0 голосов
/ 04 июня 2010

Возможно, я не понимаю ваш вопрос, но я думаю, что вам не нужен какой-либо шаблон проектирования, а что-то из пакета java.util.concurrent .

ThreadPoolExecutor?

0 голосов
/ 04 июня 2010

В GWT это называется шиной событий . GWT. HandlerManager или GWTx. PropertyChangeSupport являются рекомендованными Google реализациями. Последний доступен в J2SE начиная с 1.4.2

0 голосов
/ 04 июня 2010

Для меня это звучит как актерский рисунок. Каждый поток действует как актер, выполняя одну задачу. Результат устанавливается в очередь (да) для обработки следующим актером.

Хотя у меня нет опыта работы с java-структурами. Проконсультируйтесь с Google по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...