我有几个类希望彼此传递一些信息,并在以后使用该信息(回调模式)进行回调。

在我的应用程序中,此机制有两个作用:


计划/延迟执行
涉及消息传递的异步执行


我的对象基本上互相说:“当您完成X时,给我回电话,告诉我用Z做Y(因为那时我会忘记它了”)。 X可能只是在等待正确的时间,而且还会与远程服务通信或调用本地函数。

现在,如果Java中有函数指针(或等效函数指针),我将实现一些“ Job”类,其中包含一个所需的参数。例如,在PHP中,此结构必须存储一个类名,一个函数名和一个参数数组。在C语言中,它将是该函数的指针,我必须为所有调用使参数的编号和类型相同。

在Java中,通常的方法是让所有想要被回调的类都实现一个接口,如下所示:

public interface ICallable {
    public void call_me(Object data);
}


现在这对我不起作用,因为


要回调的对象可能具有不同的方法集来进行调用
呼叫者不是决定应该拨打什么电话的人


也许我的问题是我试图为各种回调建立一个通用的数据结构和调用过程,但是原则上,这对我来说似乎很有意义。

在Java中解决这种情况的最佳设计模式是什么?

最佳答案

我认为您会发现接口是最好的解决方案。我不理解您对他们的反对。如果接收方需要调用另一个方法,则让Interface方法调用另一个方法。

如果您的接收器类需要具有多个处理程序,则可以使用实现接口的匿名内部类,每种需要的处理程序类型都可以使用一个匿名内部类。例如,如果发送方使用名为“ ListenerInterface”的接口,则您的接收方可能会定义一个匿名内部类,该内部类实现ListenerInterface并调用接收方方法“ handlerFunction”。

   sender.addListener(new ListenerInterface()
   {
      public void callback(Object arg)
      {
         handlerFunction(arg);
      }
   });

09-30 17:14
查看更多