java中回调和观察者模式之间的区别

时间:2015-04-01 11:57:14

标签: java callback observer-pattern

我正在浏览堆栈中的以下链接

How do I perform a JAVA callback between classes?

在特定问题中答案18 指的是回调答案9 指的是观察者模式。< / p>

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

有谁可以解释这两种方法的不同之处?

2 个答案:

答案 0 :(得分:0)

回调基本上是您为类提供的一段代码,并在某个时刻由它调用。例如:

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找到有关它的更多详细信息。

答案 1 :(得分:0)

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

我想举一个清晰的示例,以侦听器(观察者)的工作方式解释回调-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并使用onChanged引用执行了mOnChangeListener方法。