2017-12-03 198 views
-1

为什么Observer界面有Observable?作为参数? 你是否推荐使用Javas现有类(实现Observer;扩展Observable)?观察者模式更新参数

public class Test implements Observer { 
    void update(Observable o, Object arg); 
    } 

回答

0

如果你使用这种模式,你需要Observer和Observable。


public class Airport extends Observable { 

    private final String name; 

    public Airport(String name) { 
     this.name = name; 
    } 

    public void planeLanded(String flight) { 
     setChanged(); 
     notifyObservers(flight); 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 
} 

public class DispatcherScreen implements Observer { 

    @Override 
    public void update(Observable o, Object arg) { 
     System.out.println("Flight " + arg + " landed at " + o.toString()); 
    } 

} 

public class Program { 

    public static void main(String[] args) { 
     Observer screen = new DispatcherScreen(); 

     Airport airport1 = new Airport("San Francisco International Airport"); 
     Airport airport2 = new Airport("O'Hare International Airport"); 
     airport1.addObserver(screen); 
     airport2.addObserver(screen); 
     // 
     airport1.planeLanded("FR1154"); 
     airport1.planeLanded("UI678"); 
     airport2.planeLanded("SU1987"); 
     airport1.planeLanded("UI678"); 
     airport2.planeLanded("AI4647"); 
    } 

} 
+1

观察和可观察被弃用java9。你不应该使用它们。只用它们来研究模式。 – wleao

1

它接收Observable参考,因此,Observer可以用它来解决这个问题将处理Object ARG已传递的方式。此外,Observer可能会在完成作业后致电deleteObserver将其自行删除。

你不应该使用它们。这不是我告诉你的,这是java自己背后的人。检查出来:

https://dzone.com/articles/javas-observer-and-observable-are-deprecated-in-jd https://docs.oracle.com/javase/9/docs/api/java/util/Observable.html

在Java 9,ObserverObservable已被弃用。

已弃用。此类和Observer界面已弃用 。 Observer和Observable支持的事件模型是 相当有限,Observable提供的通知的顺序未指定为 ,状态更改并不是与通知一一对应的 。对于更丰富的事件模型,请考虑使用java.beans的 包。对于线程间的可靠和有序的消息传递, 考虑使用java.util.concurrent包中的一个并发数据结构。对于反应流风格编程,请参阅Flow API。

退房这样对方回答: How observers subscribe on observables?

+0

如果能帮助解决问题,请[接受答案](http://meta.stackexchange.com/a/5235/155831)。 –