Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';java中回调和观察者模式的区别_Java_Callback_Observer Pattern - Fatal编程技术网

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

什么';java中回调和观察者模式的区别,java,callback,observer-pattern,Java,Callback,Observer Pattern,我正在浏览stack over flow中的以下链接 在特定问题中,答案18指的是回调,而答案9指的是观察者模式 我无法区分两者之间的区别 有人能解释一下这两种方法的不同之处吗?回调基本上是一段代码,您为类提供了回调,并在某一点被类调用。例: serverConnectionHandler = new ServerConnections(new ITypedCallback<Socket>() { @Override public void exec

我正在浏览stack over flow中的以下链接

在特定问题中,答案18指的是回调,而答案9指的是观察者模式

我无法区分两者之间的区别


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

回调基本上是一段代码,您为类提供了回调,并在某一点被类调用。例:

serverConnectionHandler = new ServerConnections(new ITypedCallback<Socket>() {
        @Override
        public void execute(Socket socket) {
            // do something with your socket here
        }
});
serverConnectionHandler=newserverconnections(new-ITypedCallback(){
@凌驾
公共void执行(套接字){
//在这里用你的插座做点什么
}
});

观察者模式是基于回调的设计模式。您可以在这里找到更多关于它的详细信息。

问题应该被定义为观察者模式如何帮助实现回调功能

我想给出一个清晰的例子,以一种监听器(观察者)如何工作的方式解释回调——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);
    }
}
my someone构建了一个名为
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
完成了它的工作,并在调用
时进行一些更改
,只要有必要,就会使用
monchangeelistener
引用执行
onChanged
方法