gpt4 book ai didi

java - 这种情况下可以使用Java Observer和Observable吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:40 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,我将使用 Java ObserverObservable 类来实现观察者模式来监听要更改的变量。我已将问题简化为可编译的 Java 项目。

扩展Observable的类

import java.util.Observable;

public class ServerResponse extends Observable {

String request;
String response;

public ServerResponse() {}

public ServerResponse(String reqquest) {
//Process HTTP request here.
//Notify observers that response has changed.
response = "Sample HTTP response from server goes here.";
setResponse(response);
}

public String getResponse() {
return response;
}

public void setResponse(String response) {
this.response = response;
setChanged();
notifyObservers(response);
}
}

实现Observer的类

import java.util.Observable;
import java.util.Observer;

public class UserProfileActivity implements Observer {

public static void main (String[] args) {
System.out.println("Adding UserProfileActivity as an observer.");
ServerResponse server = new ServerResponse();
UserProfileActivity observer = new UserProfileActivity();
server.addObserver(observer);
}

@Override
public void update(Observable o, Object arg) {
System.out.println("Response obtained from server: " + o.toString());
}

}

我遇到的问题是,当我尝试在 ServerResonse.java 中调用 setResponse 时,观察者不会收到通知...但是当我在 UserProfileActivity.java 中调用 setResponse 时,观察者能够收到通知。这种行为不是我所期望的。

我想要的预期行为是 ServerResponse 类在从 Web 服务器收到响应后调用 setResponse(这一切都在 ServerResponse 中处理)。

我是否误解了 Java 的 ObserverObservable 类?我很困惑如果 Observer 是应该收到通知的人,为什么 Observer 能够在 ServerResponse 中调用 setResponse 。对我来说这似乎有点倒退。

最佳答案

我将把代码分开:

public ServerResponse(String reqquest) {
//Process HTTP request here.
//Notify observers that response has changed.
response = "Sample HTTP response from server goes here.";
setResponse(response);
}

这永远不会达到预期的效果。您刚刚构建了一个新的 Response 类,并且没有人在任何地方引用它。因此,通知任何人是没有意义的,因为还没有人注册。

public static void main (String[] args) {
System.out.println("Adding UserProfileActivity as an observer.");
ServerResponse server = new ServerResponse();
UserProfileActivity observer = new UserProfileActivity();
server.addObserver(observer);
}

在这里,您将观察者添加到服务器。然而之后线程结束并且程序退出。

添加类似这样的内容以实际获取更新:

     for(int i = 0; i < 10; i++) {
server.setResponse("New response " + i);
Thread.sleep(1000);
}

现在调用更新方法。

关于java - 这种情况下可以使用Java Observer和Observable吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com