Java 9 keluar, dan Observertelah 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 Observertelah 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 menerapkanObserverdanObervablelagi.
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 Observermemiliki kelemahan: semua Observablesama . Anda harus mengimplementasikan logika yang didasarkan pada instanceofdan melemparkan objek ke tipe beton ke dalam Observable.update()metode.
Untuk menambahkannya ada bug seperti orang tidak bisa membuat serialObservable kelas karena tidak mengimplementasikan Serializableantarmuka dan semua anggotanya pribadi.
Apa alternatif yang lebih baik untuk itu?
Di sisi lain Listenersada banyak jenis dan mereka memiliki metode panggilan balik dan tidak memerlukan casting. Seperti yang ditunjukkan oleh @Ravi dalam jawabannya, Anda bisa memanfaatkannya PropertyChangeListener.
Selebihnya, @Deprecationtelah 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
RxJavakerangka kerja aliran reaktif lainnya. Dalam hal ini, pengguna biasanya ingin menggunakanjava.util.concurrent.FlowAPI 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.
Listenerjuga 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 PropertyChangeEventdan PropertyChangeListenerdari java.beanspaket.
PropertyChangeListenermenggantikan Observer, tetapi apa yang harus saya perpanjang / terapkan di tempat Observable?
PropertyChangeSupportvariabel sebagai instance, tetapi saya akan menghargai konfirmasi.
Mengapa Pengamat sudah usang di Java 9?
Ans: The Observablekelas dan Observerantarmuka telah usang di Jawa 9 karena model acara yang didukung oleh Observerdan Observablesangat terbatas, urutan pemberitahuan yang disampaikan oleh Observableyang 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 :
Flowadalah kelas diperkenalkan di Jawa 9 dan memiliki 4 interface yang saling terkait: Processor, Publisher, Subscriberdan 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.Publisherdan Flow.Subscriber.
Lihat Java doc https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Flow.html
Menimbang bahwa Observablekelas dan Observerantarmuka 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.beanspaket. Untuk pengiriman pesan yang andal dan teratur di antara utas, pertimbangkan untuk menggunakan salah satu struktur data bersamaan dalamjava.util.concurrentpaket. Untuk pemrograman aliran gaya reaktif, lihat API Aliran.