我有几个类想要相互传递一些信息,然后使用该信息(回调模式)稍后回调.
在我的应用程序中,此机制有两个目的:
预定/延迟执行
涉及消息的异步执行
我的对象基本上互相说"当你完成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); } });