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设计模式补充:回调模式事件监听器模式观察者模式(转)

JAVA回调机制和观察者模式实例分享

Android -- 每日一问:回调函数和观察者模式的区别?

观察者面向对象的设计模式只是实现回调的一种形式吗?

当观察者模式和回调机制遇上Android源码

java中jna使用回调实现事件监听器——观察者模式