N-R*_*YAN 1 java observer-pattern java-8 java-9
观察者和可观察类:
可观察到:-
class NewsAgency extends Observable {
String news;
public void setNews(String news) {
this.news = news;
setChanged();
notifyObservers(news);
}
}
Run Code Online (Sandbox Code Playgroud)
观察员:-
public class IndiaNews implements Observer {
@Override
public void update(Observable o, Object news) {
System.out.println("Indianews: " +news.toString());
}
}
class AjjTak implements Observer {
@Override
public void update(Observable o, Object news) {
System.out.println("AjjTak: " +news.toString());
}
Run Code Online (Sandbox Code Playgroud)
主要类别:-
public class Main {
public static void main(String[] args) {
NewsAgency newsAgency = new NewsAgency();
IndiaNews indiaNews = new IndiaNews();
AjjTak ajjTak = new AjjTak();
newsAgency.addObserver(indiaNews);
newsAgency.addObserver(ajjTak);
newsAgency.setNews("Yo");
}
Run Code Online (Sandbox Code Playgroud)
}
但我能够告诉观察者新闻已经改变了 ,那么上述说法是真实的吗?
有人能澄清我的想法吗?
谢谢 :)
但我能够告诉观察者,新闻已经改变了。上述说法何以属实?
问题跟踪器链接中的文本显示:
“例如,他们只支持某些事情已经发生变化的观念,但他们没有传达任何有关发生变化的信息。”
在您的示例中,update方法调用告诉观察者某些内容发生了变化,但没有告诉观察者实际发生了什么变化。因此,当您调用 时setNews("Yo"),indiaNews观察者会被告知情况newsAgency已发生变化。但没有告知变化是什么。观察者可以使用news参数来查看 的当前状态newsAgency,但无法查看更改之前的状态,或者更改之后的状态1。
Observer在/的许多用例中Observable,应用程序需要知道实际发生了什么变化才能触发update。
这是被强调的缺陷,也是弃用的原因之一。javadoc中的弃用文本还列出了其他文本:
“该类和
Observer接口已被弃用。其支持的事件模型Observer相当Observable有限,通知下发的顺序Observable未指定,并且状态变化与通知不是一一对应的。对于更丰富的事件模型,考虑使用该java.beans包。为了在线程之间实现可靠且有序的消息传递,请考虑使用包中的并发数据结构之一java.util.concurrent。对于反应式流样式编程,请参阅FlowAPI。”
1 - 由于未指定通知传递的顺序,因此在调用发生时观察到的对象的状态可能已再次update更改。
| 归档时间: |
|
| 查看次数: |
1870 次 |
| 最近记录: |