【teks】
1. Definisi Pola Pengamat:
Sederhananya, pola pengamat mendefinisikan ketergantungan satu-ke-banyak, memungkinkan satu atau lebih objek pengamat untuk mendengarkan objek topik. Dengan cara ini, ketika keadaan yang diamati berubah, pengamat yang sesuai perlu diberi tahu sehingga objek pengamat ini dapat diperbarui secara otomatis. Misalnya: Mekanisme pemrosesan peristiwa di GUI mengadopsi mode pengamat.
2. Implementasi mode pengamat:
Subjek (antarmuka objek yang harus diamati): Menentukan antarmuka yang terpadu dari Concretesubject; Setiap subjek dapat memiliki banyak pengamat; Concretesubject (objek yang diamati spesifik): Mempertahankan daftar referensi untuk semua pengamat tertentu; Ketika status berubah, pemberitahuan akan dikirim ke semua pengamat terdaftar. Observer (Antarmuka Pengamat): Menentukan antarmuka terpadu dari ConcreteObserver; mendefinisikan metode pembaruan (), yang akan dipanggil ketika keadaan objek yang diamati berubah. ConcreteObserver: Mempertahankan referensi ke Concretesubject; Keadaan spesifik disinkronkan dengan concretesubject; Menerapkan antarmuka pengamat, fungsi metode pembaruan (): Setelah perubahan subjek terdeteksi, informasi akan diperbarui.
Diagram digambarkan sebagai berikut:
Catatan: Ada satu set di kelas yang diamati untuk mempertahankan semua pengamat.
3. Berikan contoh:
[Skema 1]: Tentukan antarmuka atau kelas sendiri untuk mengimplementasikan pola pengamat.
Langkah -langkahnya adalah sebagai berikut:
(1) Tentukan antarmuka yang dimiliki oleh pengamat:
paket com.vince.observer; antarmuka publik yang dapat diamati {// mendaftar sebagai pengamat public void registeroBserver (pengamat pengamat); // Batalkan public void public Remestobserver (Observer Observer); // beri tahu semua pengamat untuk memperbarui informasi public void notifyoBserver ();}(2) Tentukan pengamat spesifik: cangkir
Paket com.vince.observer; impor java.util.vector; Piala kelas publik mengimplementasikan {// daftar objek pengamat yang dikelola oleh pengamat vektor swasta <bobserver> vektor = vektor baru <bobserver> (); harga pelampung pribadi; Piala Umum (harga float) {this.price = harga; } public float getPrice () {harga kembali; } public void setPrice (harga float) {// beri tahu semua pengamat saat memodifikasi harga this.price = harga; notifyoBserver (); } @Override public void registeroBserver (Observer Observer) {// Register Observer Vector.Add (Observer); } @Override public void RemestoBserver (Observer Observer) {// Batalkan pengamat vektor.remove (pengamat); } @Override public void notifyoBserver () {// Implement Notify All Observer Objects untuk (Observer Observer: Vector) {Observer.update (harga); }}}(3) Tentukan antarmuka umum yang dimiliki pengamat: (memperbarui data tentu saja hasil akhirnya harus dilakukan dengan pengamat)
Paket com.vince.observer; Public Interface Observer {public void update (harga float); 5}(4) Tentukan objek pengamat tertentu:
paket com.vince.observer; orang kelas publik mengimplementasikan pengamat {nama string pribadi; orang publik (nama string) {this.name = name; } @Override public void update (harga float) {System.out.println (Nama+"Harga Piala yang Anda ikuti telah diperbarui ke:"+Harga); }}(5) Tes:
Paket com.vince.observer; tes kelas publik {public static void main (string [] args) {// Buat boneka objek objek pengamat = cangkir baru (3000); // Buat dua objek pengamat orang P1 = orang baru ("Life 1"); Orang P2 = orang baru ("Life 2"); // Daftarkan sebagai pengamat boneka.RegisteroBserver (P1); Doll.RegisteroBserver (P2); System.out.println ("Putaran Pertama Promosi:"); Doll.setPrice (2698); // harga perubahan harga.out.println ("Promosi Babak Kedua:"); Doll.SetPrice (2299); // System.out.println ("Promosi Babak Kedua:"); Doll.SetPrice (1998); Doll.Removeobserver (P2); // Hapus Life 2 System.out.println ("Promosi Putaran Keempat:"); Doll.setPrice (1098); }}Setelah berjalan, hasilnya ditampilkan sebagai berikut:
[Skema 2]: Langsung hubungi JDK API untuk mengimplementasikannya.
Langkah -langkahnya adalah sebagai berikut:
(1) Menerapkan objek pengamat spesifik dengan mewarisi kelas yang dapat diamati:
Paket com.vince.observer2; impor java.util.observable; Piala kelas publik memperluas {private float price; Piala Umum (harga float) {this.price = harga; } public float getPrice () {harga kembali; } public void setPrice (harga float) {this.price = harga; this.setchanged (); // notifikasi, data telah mengubah ini.notifyoBserver (); }}(2) Menerapkan objek pengamat tertentu dengan mengimplementasikan antarmuka java.util.observer:
Paket com.vince.observer2; impor java.util.observable; impor java.util.observer; orang kelas publik mengimplementasikan pengamat {nama string pribadi; orang publik (nama string) {this.name = name; } @Override public void update (Observable o, objek arg) {if (o instanceof cup) {cup cup = (cup) o; System.out.println (Nama+"Harga cangkir yang Anda ikuti telah diperbarui ke:"+cup.getPrice ()); }}}(3) Tes:
Paket com.vince.observer2; tes kelas publik {public static void main (string [] args) {cup cup = new cup (3000); Orang P1 = orang baru ("Life 1"); Orang P2 = orang baru ("Life 2"); cup.addobserver (P1); cup.addobserver (P2); System.out.println ("Babak Pertama Promosi"); cup.setPrice (2988); System.out.println ("Babak Kedua Promosi"); cup.setprice (2698); cup.deleteObserver (P2); System.out.println ("putaran ketiga promosi"); Cup.SetPrice (1998); }}Setelah berjalan, hasilnya adalah sebagai berikut:
【Dokumen Proyek】
Tautan: http://xiazai.vevb.com/201609/yuanma/javaseguancha(vevb.com).rar
4. Ringkasan: (Peran mode pengamat)
Pola pengamat menciptakan kopling abstrak antara pengamat dan pengamat. Yang diketahui oleh semua karakter pengamat hanyalah daftar pengamat tertentu.
Karena pengamat dan pengamat tidak digabungkan secara erat bersama, mereka dapat dimiliki oleh berbagai tingkat abstraksi. Jika pengamat dan pengamat dilemparkan bersama, maka objek harus melintasi tingkat abstraksi dan konkretisasi.
Mode pengamat mendukung komunikasi siaran. Pengamat akan mengeluarkan pemberitahuan untuk semua pengamat terdaftar.
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.