23 Pola Desain Bab 13: Pola Pengamat Java
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, kita perlu 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. Bahkan, 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:
Pengamat: Dari diagram kelas, Anda dapat melihat bahwa ada wadah vektor di kelas yang menyimpan objek pengamat (alasan mengapa Anda menggunakan vektor alih -alih daftar adalah karena ada banyak
Saat threading, vektor aman, sedangkan daftar tidak aman), wadah vektor ini adalah inti dari kelas pengamat, dan ada tiga metode lain: metode terlampir 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.
Implementasi kode mode pengamat
Subjek kelas abstrak publik {vektor pribadi <VERVERZER> OBS = vektor baru <Ibserver> (); public void addoBserver (Observer Obs) {this.obs.add (obs); } public void delobserver (pengamat obs) {this.obs.remove (obs); } Protected void notifyoBserver () {for (Observer o: obs) {o.update (); }} public abstrak void dosomething (); } ConCretesubject kelas publik memperluas subjek {public void dosomething () {System.out.println ("dikembalikan oleh acara pengamat"); this.notifyoBserver (); }} Public Interface Observer {public void update (); } kelas publik ConcreteObServer1 mengimplementasikan pengamat {public void update () {System.out.println ("Observer 1 menerima pesan dan memprosesnya."); }} kelas publik CONCRETEOBServer2 mengimplementasikan pengamat {public void update () {System.out.println ("Observer 2 menerima pesan dan memprosesnya."); }} klien kelas publik {public static void main (string [] args) {subjek sub = new concreteSubject (); sub.addobserver (ConcreteObserver baru ()); // tambahkan pengamat1 sub.addobserver (concreeteobserver baru ()); // tambahkan pengamat2 sub.dosomething (); }} Hasil berjalan
Peristiwa pengamat dibalik dan Observer 1 menerima informasi dan memprosesnya.
Observer 2 menerima informasi dan memprosesnya.
Melalui hasil berjalan, kita dapat melihat bahwa kita hanya menyebut metode subjek, tetapi metode yang relevan dari kedua pengamat dipanggil pada saat yang sama. Jika Anda melihat kode dengan cermat, itu sebenarnya sangat sederhana. Ini tidak lebih dari sama seperti Anda mengaitkan kelas pengamat di kelas subjek dan melintasi metode pembaruan pengamat dalam metode dosomething.
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.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.