我正在浏览堆栈中的以下链接
How do I perform a JAVA callback between classes?
在特定问题中答案18 指的是回调而答案9 指的是观察者模式。< / p>
我无法区分两者之间的区别。
有谁可以解释这两种方法的不同之处?
答案 0 :(得分:0)
回调基本上是您为类提供的一段代码,并在某个时刻由它调用。例如:
serverConnectionHandler = new ServerConnections(new ITypedCallback<Socket>() {
@Override
public void execute(Socket socket) {
// do something with your socket here
}
});
观察者的模式是基于回调的设计模式。您可以在http://en.wikipedia.org/wiki/Observer_pattern找到有关它的更多详细信息。
答案 1 :(得分:0)
应该将问题圈定为观察者模式如何帮助实现回调功能。
我想举一个清晰的示例,以侦听器(观察者)的工作方式解释回调-android库极大地采用了以下方法。
class RemoteClass {
private OnChangeListener mOnChangeListener;
void makeSomeChanges() {
/*
.. do something here and call callback
*/
mOnChangeListener.onChanged(this, 1);
}
public void setOnChangeListener(OnChangeListener listener) {
mOnChangeListener = listener;
}
public interface OnChangeListener {
public void onChanged(RemoteClass remoteClass, int test);
}
}
有人为我建立了一个类,其名称为RemoteClass
,并通过将OnChangeListener
接口的实现传递给setOnChangeListener
方法来告诉您的类引用回调。
class Test {
public static void main(String[] args) {
RemoteClass obj = new RemoteClass();
obj.setOnChangeListener(demoChanged);
obj.makeSomeChanges();
}
private static RemoteClass.OnChangeListener demoChanged = new RemoteClass.OnChangeListener() {
@Override
public void onChanged(RemoteClass remoteClass, int incoming) {
switch (incoming) {
case 1:
System.out.println("I will take appropriate action!");
break;
default:
break;
}
}
};
}
现在您的类已完成其任务,RemoteClass
完成了工作,并在必要时调用makeSomeChanges
并使用onChanged
引用执行了mOnChangeListener
方法。