Dalam istilah yang sangat sederhana (karena jawaban lain merujuk Anda ke semua pola desain resmi, jadi lihatlah untuk detail lebih lanjut):
Jika Anda ingin memiliki kelas yang dipantau oleh kelas lain dalam ekosistem program Anda, Anda mengatakan bahwa Anda ingin kelas dapat diamati. Yaitu mungkin ada beberapa perubahan di negara bagian yang Anda ingin disiarkan ke seluruh program.
Sekarang, untuk melakukan ini kita harus memanggil semacam metode. Kami tidak ingin kelas Observable untuk dipasangkan dengan kelas yang tertarik untuk mengobservasinya. Tidak peduli siapa itu asalkan memenuhi kriteria tertentu. (Bayangkan itu adalah stasiun radio, tidak peduli siapa yang mendengarkan selama mereka memiliki radio FM yang disetel pada frekuensinya). Untuk mencapai itu kami menggunakan antarmuka, yang disebut sebagai Pengamat.
Oleh karena itu, kelas yang dapat diobservasi akan memiliki daftar Pengamat (yaitu contoh yang menerapkan metode antarmuka Pengamat yang mungkin Anda miliki). Setiap kali ia ingin menyiarkan sesuatu, ia hanya memanggil metode pada semua pengamat, satu demi satu.
Hal terakhir untuk menutup teka-teki adalah bagaimana kelas Observable tahu siapa yang tertarik? Jadi kelas Observable harus menawarkan beberapa mekanisme untuk memungkinkan Pengamat mendaftarkan minat mereka. Metode sepertiaddObserver(Observer o)
internal menambahkan Observer ke daftar pengamat, sehingga ketika sesuatu yang penting terjadi, ia akan melewati daftar dan memanggil metode pemberitahuan masing-masing dari antarmuka Observer dari setiap instance dalam daftar.
Mungkin dalam wawancara mereka tidak bertanya secara eksplisit tentang java.util.Observer
danjava.util.Observable
tetapi tentang konsep generik. Konsepnya adalah pola desain, yang terjadi pada Java untuk memberikan dukungan secara langsung di luar kotak untuk membantu Anda mengimplementasikannya dengan cepat saat Anda membutuhkannya. Jadi saya akan menyarankan agar Anda memahami konsep daripada metode / kelas yang sebenarnya (yang dapat Anda cari ketika Anda membutuhkannya).
MEMPERBARUI
Menanggapi komentar Anda, java.util.Observable
kelas aktual menawarkan fasilitas berikut:
Menyimpan daftar java.util.Observer
instance. Contoh baru yang tertarik untuk diberi tahu dapat ditambahkan melalui addObserver(Observer o)
, dan dihapus melalui deleteObserver(Observer o)
.
Mempertahankan keadaan internal, menentukan apakah objek telah berubah sejak pemberitahuan terakhir kepada pengamat. Ini berguna karena memisahkan bagian di mana Anda mengatakan bahwa Observable
telah berubah, dari bagian di mana Anda memberi tahu perubahan. (Mis. Berguna jika Anda memiliki banyak perubahan yang terjadi dan Anda hanya ingin memberi tahu di akhir proses daripada di setiap langkah kecil). Ini dilakukan melalui setChanged()
. Jadi Anda sebut saja ketika Anda mengubah sesuatu ke Observable
dan Anda ingin sisanya Observers
akhirnya tahu tentang itu.
Memberitahu semua pengamat bahwa kondisi spesifik Observable
telah berubah. Ini dilakukan melalui notifyObservers()
. Ini memeriksa apakah objek telah benar-benar berubah (yaitu panggilan setChanged()
dibuat) sebelum melanjutkan dengan pemberitahuan. Ada 2 versi, satu tanpa argumen dan satu lagi dengan Object
argumen, jika Anda ingin memberikan beberapa informasi tambahan dengan notifikasi. Secara internal apa yang terjadi adalah bahwa ia hanya mengulangi daftar Observer
instance dan memanggil update(Observable o, Object arg)
metode untuk masing-masing. Ini memberitahukan objek Observer
mana yang bisa diamati yang berubah (Anda bisa mengamati lebih dari satu), dan ekstra Object arg
untuk berpotensi membawa beberapa informasi tambahan (melewati notifyObservers()
.