我想在Java中实现一个设计,我有多个事件源(Threads)。此类事件源完成特定任务,必须通知唯一的事件处理程序(类),并且必须根据事件源通知完成其他任务。
我的问题是:如何在Java中以适当的方式实现这个设计? 有一种类似于这种设计的设计模式吗?
提前谢谢你:)。
答案 0 :(得分:3)
我认为您正在寻找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();
}
}
答案 1 :(得分:0)
听起来像演员模式对我来说。每个线程充当一个actor,完成一个单独的任务。结果被设置在一个队列(是),由下一个演员处理。
我没有使用java actor框架的经验。请向Google咨询。
答案 2 :(得分:0)
在GWT中,这称为event bus。 GWT。HandlerManager或GWTx。PropertyChangeSupport是Google推荐的实施方式。后者自J2.2以来在J2SE中可用
答案 3 :(得分:0)
也许我不明白你的问题,但我认为你不需要任何设计模式,而是来自java.util.concurrent包的东西。
ThreadPoolExecutor?
答案 4 :(得分:0)
可观察模式对线程没有意见。在EventThread pattern中,监听器可以在什么线程中说明事件的处理时间。
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() );