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?
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?
Jawaban:
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.
Ya, itu sudah usang di Jawa 9 . Dan, kita tidak bisa menerapkan pola pengamat lagi.
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.
Mereka tidak menyediakan model acara yang cukup kaya untuk aplikasi. Misalnya, mereka hanya mendukung gagasan bahwa sesuatu telah berubah, tetapi mereka tidak menyampaikan informasi apa pun tentang apa yang telah berubah
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.
Anda dapat menggunakan PropertyChangeEvent
dan PropertyChangeListener
dari java.beans
paket.
PropertyChangeListener
menggantikan Observer
, tetapi apa yang harus saya perpanjang / terapkan di tempat Observable
?
PropertyChangeSupport
variabel sebagai instance, tetapi saya akan menghargai konfirmasi.
Mengapa Pengamat sudah usang di Java 9?
Ans: The Observable
kelas dan Observer
antarmuka telah usang di Jawa 9 karena model acara yang didukung oleh Observer
dan Observable
sangat terbatas, urutan pemberitahuan yang disampaikan oleh Observable
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
Alternatif pola pengamat?
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
dan Subscription
.
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 a Flow.Publisher
dan Flow.Subscriber
.
Lihat Java doc https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Flow.html
Menimbang bahwa Observable
kelas dan Observer
antarmuka telah usang pada Java 9. Sesuai pos , Pengamat dan Yang Dapat Diamati Java Tidak Digunakan dalam JDK 9
Model acara yang didukung oleh Observer dan Observable sangat terbatas, urutan pemberitahuan yang disampaikan oleh Observable tidak ditentukan, dan perubahan status tidak dalam korespondensi satu-satu dengan pemberitahuan. Untuk model acara yang lebih kaya, pertimbangkan untuk menggunakan
java.beans
paket. Untuk pengiriman pesan yang andal dan teratur di antara utas, pertimbangkan untuk menggunakan salah satu struktur data bersamaan dalamjava.util.concurrent
paket. Untuk pemrograman aliran gaya reaktif, lihat API Aliran.