java 中的回调模式和观察者模式有什么区别

what's difference between a callback and observer pattern in java

我在堆栈溢出

中经历了以下link

How do I perform a JAVA callback between classes?

在特定问题中,answer 18 指的是 callbacksanswer 9 指的是观察者模式.

我分不清两者的区别

谁能解释一下这两种方法的不同之处?

回调基本上是您为 class 提供的一段代码,并在特定时间被它调用。例如:

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);
    }
}

有一个 class 建立了我的人,它的名字是 RemoteClass 并告诉你的 class 通过将 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;
            }
        }
    };
}

现在你的 class 已经完成了它的任务,RemoteClass 开始了它的工作,并且在必要时调用 makeSomeChanges 会导致 onChanged 使用 [=18= 执行方法]参考。