java中的回调和观察者模式有啥区别
Posted
技术标签:
【中文标题】java中的回调和观察者模式有啥区别【英文标题】:what's difference between a callback and observer pattern in javajava中的回调和观察者模式有什么区别 【发布时间】:2015-04-01 11:57:13 【问题描述】:我正在通过 stack over flow 中的以下链接
How do I perform a JAVA callback between classes?
在特定问题中,answer 18 指的是回调,answer 9 指的是观察者模式。
我无法区分两者之间的区别。
谁能解释一下这两种方法的不同之处?
【问题讨论】:
【参考方案1】:回调基本上是您为类提供的一段代码,并在某个时刻被它调用。例如:
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。
【讨论】:
【参考方案2】:问题应改为观察者模式如何帮助实现回调功能。
我想给出一个清晰的例子来解释回调的监听器(观察者)是如何工作的——下面的方法被 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
方法。
【讨论】:
以上是关于java中的回调和观察者模式有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
Java设计模式补充:回调模式事件监听器模式观察者模式(转)