Java Observer
및 Observable
클래스를 사용하여 Observer 패턴을 구현하여 변경할 변수를 수신 대기하는 Android 애플리케이션이 있습니다. 필자는이 문제를 컴파일 가능한 Java 프로젝트로 단순화했습니다. 내가 ServerResonse.java
에서 setResponse
를 호출 할 때 Observer
이 경우 Java Observer and Observable을 사용할 수 있습니까?
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());
}
}
내가 경험하고 문제를 구현 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);
}
}
클래스를 확장
클래스는, 관찰자는 통보 ... 것이 아니라, UserProfileActivity.java
에 setResponse
을 호출하면 관찰자가 알림을받을 수 있습니다. 이 동작은 내가 예상 한 동작이 아닙니다.
웹 서버에서 응답을받은 후에 클래스를 호출하려는 사람은 ServerResponse
인데, 이는 모두 ServerResponse
으로 처리됩니다.
Java의 Observer
및 Observable
클래스를 오해하고 있습니까? 나는 Observer
이 Observer
이 통지를 받아야하는 것이라면 Observer
이 setResponse
을 ServerResponse
으로 호출 할 수있는 이유에 대해 혼란스러워합니다. 나에게 조금 뒤로 보인다.
ServerResponse의 String 매개 변수가있는 사용하지 않는 생성자를 제외하고 notifyObservers() 호출을 트리거하는 setResponse에 대한 호출이 어디에도 없으므로이 코드가 모두 있습니다. – john16384
예, 필자가 원하는 결과를 제공하지 않았기 때문에'UserProfileActivity'와'ServerResponse'에서'setResponse'를 호출 한 줄을 제거했습니다. – AvP
Observable이하는 일에 대한 오해라고 생각합니다. notifyObservers를 호출하면 메시지 나 아무것도 보내지 않을 것이고, 등록 된 각 Observer에 대해 동일한 스레드에서 update 메소드를 호출하게됩니다. – john16384