Definisi: Tentukan ketergantungan satu-ke-banyak antara objek, sehingga ketika setiap objek mengubah statusnya, semua objek yang bergantung pada itu akan diberitahu dan diperbarui secara otomatis.
Jenis: Pola perilaku
Diagram kelas:
Seringkali ada kebutuhan dalam sistem perangkat lunak: jika keadaan suatu objek berubah, beberapa objek yang terkait dengannya juga akan berubah. Misalnya, kami ingin merancang fungsi menu klik kanan. Selama kita mengklik kanan di area efektif perangkat lunak, menu akan muncul; Misalnya, kami ingin merancang fungsi penyebaran otomatis, seperti ketika Eclipse dikembangkan, selama file dimodifikasi, Eclipse akan secara otomatis menggunakan file yang dimodifikasi ke server. Ada kesamaan antara kedua fungsi ini, yaitu, satu objek harus selalu memantau objek lain, dan selama keadaan berubah, ia akan mengambil tindakan yang sesuai. Faktanya, ada banyak solusi yang dapat mencapai ini, tetapi menggunakan model pengamat tidak diragukan lagi merupakan pilihan utama.
Struktur pola pengamat
Dalam mode pengamat paling dasar, empat karakter berikut disertakan:
Observer: Dari diagram kelas, Anda dapat melihat bahwa ada wadah vektor di kelas yang menyimpan objek pengamat (alasan mengapa vektor digunakan alih-alih daftar adalah karena ketika operasi multi-threaded, vektor aman, sementara daftar tidak aman). Wadah vektor ini adalah inti dari kelas pengamat. Ada tiga metode lain: metode lampirkan adalah menambahkan objek pengamat ke wadah ini; Metode pelepasan adalah menghapus objek pengamat dari wadah; Metode pemberitahuan adalah memanggil metode yang sesuai dari objek pengamat secara bergantian. Peran ini dapat berupa antarmuka, kelas abstrak atau kelas konkret, karena dalam banyak kasus akan dicampur dengan pola lain, sehingga ada lebih banyak kasus menggunakan kelas abstrak.
Observer: Peran pengamat umumnya antarmuka, yang hanya memiliki satu metode pembaruan. Ketika keadaan pengamat berubah, metode ini akan dipanggil.
Pengamat Khusus: Peran ini digunakan untuk ekspansi yang mudah, dan logika bisnis spesifik dapat didefinisikan dalam peran ini.
Pengamat Khusus: Implementasi spesifik dari antarmuka pengamat. Dalam peran ini, logika yang akan diproses ketika keadaan objek yang diamati berubah.
Contoh Implementasi Mode Pengamat
Antarmuka subjek
subjek antarmuka publik {public void registeroBserver (pengamat o); public void RemestoBserver (Observer O); public void notifyallobserver ();}Antarmuka pengamat
Public Interface Observer {public void update (subjek s);}Kelas Hunter mengimplementasikan antarmuka subjek
impor java.util.arraylist; Headhunter kelas publik mengimplementasikan subjek {// Tentukan daftar pengguna, seperti Mike, Bill, dll. Private ArrayList <VERNZERS> USERLIST; Pekerjaan ArrayList Private <string>; headhunter publik () {userList = ArrayList baru <Ibserver> (); jobs = new ArrayList <String> (); } @Override public void registeroBserver (pengamat o) {userlist.add (o); } @Override public void RemestoBserver (Observer o) {} @Override public void notifyAlloBserver () {for (Observer o: userList) {o.update (ini); }} public void addJob (string job) {this.jobs.add (job); notifyAllObserver (); } Public ArrayList <String> getJobs () {return jobs; } public string toString () {return jobs.toString (); }}Pencari kerja adalah seorang pengamat:
pencari kerja kelas publik mengimplementasikan pengamat {nama string pribadi; Public Jobseeker (nama string) {this.name = name; } @Override public void update (subjek s) {System.out.println (this.name + "mendapat pemberitahuan!"); // cetak daftar pekerjaan System.out.println (s); }}Mulai:
kelas publik {public static void main (string [] args) {headhunter hh = new headhunter (); HH.RegisterObserver (pencari kerja baru ("Mike")); HH.RegisteroBserver (pencari kerja baru ("Chris")); HH.RegisteroBserver (pencari kerja baru ("Jeff")); // Setiap kali Anda menambahkan pekerjaan, semua pekerjaan dapat diberi tahu. hh.addjob ("Google Job"); hh.addjob ("yahoo job"); }} Keuntungan dari mode pengamat
Pengamat dan pengamat sedikit terkait dan secara abstrak digabungkan, sehingga lebih mudah untuk memperluas keduanya.
Mode pengamat adalah mekanisme pemicu yang umum digunakan, yang membentuk rantai pemicu dan memproses metode masing -masing pengamat secara bergantian. Tetapi pada saat yang sama, ini juga merupakan kerugian dari mode pengamat. Karena dipicu dalam rantai, ketika ada banyak pengamat, masalah kinerja lebih mengkhawatirkan. Selain itu, dalam struktur rantai, kesalahan referensi melingkar lebih mungkin terjadi, menyebabkan sistem dipalsukan.
Meringkaskan
Dalam bahasa Java, ada pengamat antarmuka, dan kelas implementasinya dapat diamati, yang sering mengimplementasikan peran pengamat. Kita dapat melihat metode penggunaan dua kelas ini dalam dokumentasi API JDK.
Teman -teman yang telah melakukan VC ++, JavaScript DOM atau AWT Development semuanya luar biasa tentang pemrosesan acara mereka. Setelah memahami pola pengamat, mereka memiliki pemahaman tertentu tentang prinsip -prinsip mekanisme pemrosesan peristiwa. Jika Anda ingin merancang fungsi suatu peristiwa yang memicu mekanisme pemrosesan, menggunakan mode pengamat adalah pilihan yang baik. Acara pemrosesan DEM (model acara delegasi) dalam AWT diimplementasikan menggunakan mode pengamat.