弃用原因:
他们没有为应用程序提供足够丰富的事件模型。例如,他们只能支持某些更改的概念,但不传达有关更改的任何信息。
不可序列化-因为,Observable不实现可序列化。因此,您既不能序列化Observable也不能对其子类进行序列化。
没有线程安全-方法可以被其子类覆盖,并且事件通知可以以不同的顺序发生,并且可能在不同的线程上发生,这足以破坏任何“线程安全”。
并且大多数问题都具有修复的复杂性,但仍然“未解决”或没有积极的发展,这就是不推荐使用的原因。
观察者模式的替代方案:对于更丰富的事件模型,请考虑使用该java.beans
程序包。为了在线程之间进行可靠且有序的消息传递,请考虑使用java.util.concurrent程序包中的并发数据结构之一
。有关反应式流样式的编程,请参见Flow API。
从java.beans包使用PropertyChangeEvent和PropertyChangeListener。
Listeners,类型很多,它们都有回调方法,不需要强制转换。
观察者设计模式有多种选择,而响应流就是其中之一。反应性流或流API(https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Flow.html)
Flow是一类在Java中9中引入并具有4个相互关联的接口:Processor,Publisher,Subscriber和Subscription。
Flow.Processor :既充当订户又充当发布者的组件。
Flow.Publisher :订户收到的项目的生产者。
Flow.Subscriber :消息的接收者。
Flow.Subscription:链接a
Flow.Publisher和的消息控件Flow.Subscriber。
参考资料
/questions/46380073/observer-is-deprecated-in-java-9-what-should-we-use-instead-of-it
stackoverflow.com/questions/46380073