【发布时间】:2015-04-01 11:57:13
【问题描述】:
我正在通过 stack over flow 中的以下链接
How do I perform a JAVA callback between classes?
在特定问题中,answer 18 指的是回调,answer 9 指的是观察者模式。
我无法区分两者之间的区别。
谁能解释一下这两种方法的不同之处?
【问题讨论】:
标签: java callback observer-pattern
我正在通过 stack over flow 中的以下链接
How do I perform a JAVA callback between classes?
在特定问题中,answer 18 指的是回调,answer 9 指的是观察者模式。
我无法区分两者之间的区别。
谁能解释一下这两种方法的不同之处?
【问题讨论】:
标签: java callback observer-pattern
回调基本上是您为类提供的一段代码,并在某个时刻被它调用。例如:
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。
【讨论】:
问题应改为观察者模式如何帮助实现回调功能。
我想给出一个清晰的例子来解释回调的监听器(观察者)是如何工作的——下面的方法被 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 导致使用mOnChangeListener 引用执行onChanged 方法。
【讨论】: