创建和发送自定义事件



如何将自定义事件从一个对象发送到另一个对象?
我有2个相同类型的工作对象,主类使用worker。如果worker1中的某些条件为真,它应该向主类发送一个事件来切换worker。

这是我的场景:

class Worker1 extends Base{
   public void DoSomeWork(Arg argument){
      if(someCondition=true){
          SendEvent();
      }
   }
}
class MainClassThatUsesWorker{
    Base worker = new Worker1();
    public void EventArrived(){
        worker = new Worker2();      
    }
    public void UseWorKer(){
        worker.DoSomeWork();      
    }
}

我建议您实现观察者模式。然后,你的主类是观察者,工作类是可观察对象(或主体)。当工作线程触发适当的事件时,你的主类会适当地处理它。要小心同步,因为您要处理多个线程。

看看Swing等是如何做到的。基本上,您定义了一个事件类和一个Listener接口,该接口由主类(或其他处理程序)实现。然后向发送者注册事件,即将它们放入某个集合中,当事件被触发时,迭代该集合并调用侦听器上的处理方法。

像这样(简化):

class MyEvent { ... };
interface MyListener {
  void handleEvent( MyEvent e );
}
//inside the worker class
public void SendEvent() {
  MyEvent e = new MyEvent();
  for( MyListener l : listeners ) {
    l.handleEvent( e );
  }
}

首先,请尊重Java命名约定。方法应该以小写字母开头。

如果你想让主对象在worker中发生事情时得到通知,worker必须有一个对主对象的引用:

public void doSomeWork(MainClassThatUsesWorker main) {
    if (someCondition) {
        main.eventArrived();
    }
}

您可能还想接受其他类型的侦听器,而不仅仅是MainClassThatUsesWorker。在这种情况下,声明一个具有eventArrived方法的WorkerListener接口,并以WorkerListener作为参数。MainClassThatUsesWorker必须实现这个接口来监听由worker触发的事件,但是其他类也可以实现相同的接口并作为参数传递。

相关内容

  • 没有找到相关文章

最新更新