Java 9 keluar, dan Observer
telah usang. Mengapa demikian? Apakah ini berarti bahwa kita seharusnya tidak menerapkan pola pengamat lagi?
Akan lebih baik untuk mengetahui apa alternatif yang lebih baik?
sumber
Java 9 keluar, dan Observer
telah usang. Mengapa demikian? Apakah ini berarti bahwa kita seharusnya tidak menerapkan pola pengamat lagi?
Akan lebih baik untuk mengetahui apa alternatif yang lebih baik?
Mengapa demikian? Apakah ini berarti bahwa kita seharusnya tidak menerapkan pola pengamat lagi?
Menjawab bagian terakhir terlebih dahulu -
YA , itu berarti Anda tidak boleh menerapkanObserver
danObervable
lagi.
Mereka tidak menyediakan model acara yang cukup kaya untuk aplikasi. Misalnya, mereka hanya dapat mendukung gagasan bahwa sesuatu telah berubah, tetapi tidak menyampaikan informasi apa pun tentang apa yang telah berubah.
Jawaban Alex menempatkannya dengan baik di muka yang Observer
memiliki kelemahan: semua Observable
sama . Anda harus mengimplementasikan logika yang didasarkan pada instanceof
dan melemparkan objek ke tipe beton ke dalam Observable.update()
metode.
Untuk menambahkannya ada bug seperti orang tidak bisa membuat serialObservable
kelas karena tidak mengimplementasikan Serializable
antarmuka dan semua anggotanya pribadi.
Apa alternatif yang lebih baik untuk itu?
Di sisi lain Listeners
ada banyak jenis dan mereka memiliki metode panggilan balik dan tidak memerlukan casting. Seperti yang ditunjukkan oleh @Ravi dalam jawabannya, Anda bisa memanfaatkannya PropertyChangeListener
.
Selebihnya, @Deprecation
telah ditandai dengan dokumentasi yang tepat untuk mengeksplorasi paket-paket lain yang terhubung dengan jawaban lain juga.
Perhatikan bahwa penghentian itu juga ditandai dengan analisis sebagaimana dinyatakan dalam surat ini -
Saat ini, siapa pun yang mengalami hal ini mungkin secara tidak sengaja memukul mereka saat menggunakan
RxJava
kerangka kerja aliran reaktif lainnya. Dalam hal ini, pengguna biasanya ingin menggunakanjava.util.concurrent.Flow
API jdk9 yang semua kerangka kerja reaktif-stream harus kompatibel / interoperable dalam versi mendatang yang kompatibel dengan jdk9 yang direncanakan.
Sunting : Perlu juga disebutkan bahwa penghentian API bukan hanya semata-mata karena alasan di atas, tetapi juga tidak dapat mempertahankan kode warisan seperti yang disebutkan dalam komentar dari beberapa laporan bug (ditautkan di atas) yang dinaikkan ke tandai peningkatan dalam implementasinya dengan satu atau lain cara.
Listener
juga merupakan Pengamat.notifyObservers()
bersamaan. Ini adalah codelet dari shared yang sama untuk menjelaskan fungsinya secara detail.Ya, itu sudah usang di Jawa 9 . Dan, kita tidak bisa menerapkan pola pengamat lagi.
Mengapa demikian?
Ada lebih banyak alasan:
Not Serializable - Karena, Observable tidak mengimplementasikan Serializable. Jadi, Anda tidak dapat Serialize Diamati subkelasnya.
Tanpa Keamanan Utas - Metode dapat ditimpa oleh subkelasnya, dan pemberitahuan acara dapat terjadi dalam urutan berbeda dan mungkin pada utas berbeda, yang cukup untuk mengganggu "keselamatan utas" apa pun.
Kurang untuk menawarkan -
Masalah Terbuka - Seperti yang disebutkan, ada banyak masalah besar yang diangkat (keselamatan ulir, Serializable) dan kebanyakan dari mereka memiliki kompleksitas untuk diperbaiki dan masih "tidak diperbaiki" atau Tidak Ada Pengembangan Aktif , dan itulah alasan mengapa itu telah ditinggalkan .
Saya juga merekomendasikan untuk membaca jawaban ini. Mengapa pola pengamat harus ditinggalkan? , @Jeff telah menjelaskan alasan penghentian lainnya.
Jadi, apa alternatif yang kita miliki?
Anda dapat menggunakan
PropertyChangeEvent
danPropertyChangeListener
darijava.beans
paket.sumber
PropertyChangeListener
menggantikanObserver
, tetapi apa yang harus saya perpanjang / terapkan di tempatObservable
?PropertyChangeSupport
variabel sebagai instance, tetapi saya akan menghargai konfirmasi.Ans: The
Observable
kelas danObserver
antarmuka telah usang di Jawa 9 karena model acara yang didukung olehObserver
danObservable
sangat terbatas, urutan pemberitahuan yang disampaikan olehObservable
yang tidak ditentukan, dan perubahan negara tidak dalam satu-untuk-satu korespondensi dengan pemberitahuan.Lihat Java doc https://docs.oracle.com/javase/9/docs/api/java/util/Observable.html
Ada banyak alternatif pola desain Pengamat dan Reactive Streams adalah salah satunya.
API Aliran atau Aliran Reaktif :
Flow
adalah kelas diperkenalkan di Jawa 9 dan memiliki 4 interface yang saling terkait:Processor
,Publisher
,Subscriber
danSubscription
.Flow.Processor
: Komponen yang bertindak sebagai Pelanggan dan Penerbit.Flow.Publisher
: Produser barang yang diterima oleh Pelanggan.Flow.Subscriber
: Penerima pesan.Flow.Subscription
: Tautan kendali pesan aFlow.Publisher
danFlow.Subscriber
.Lihat Java doc https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Flow.html
sumber
Menimbang bahwa
Observable
kelas danObserver
antarmuka telah usang pada Java 9. Sesuai pos , Pengamat dan Yang Dapat Diamati Java Tidak Digunakan dalam JDK 9sumber