【问题标题】: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 指的是观察者模式

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

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

【问题讨论】:

    标签: java callback observer-pattern


    【解决方案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 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-15
        • 2015-02-24
        • 2021-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        相关资源
        最近更新 更多