Pertama, mari kita perkenalkan apa itu pendengar:
Pendengar - adalah program Java biasa yang mengimplementasikan antarmuka yang tertunda. Program ini secara khusus digunakan untuk mendengarkan panggilan metode kelas lain.
Ini menggunakan mode pengamat.
Apa itu mode pengamat:
Mendefinisikan ketergantungan satu-ke-banyak antara objek. Ketika keadaan suatu objek berubah, semua objek yang bergantung padanya diberitahu untuk memperbarui secara otomatis.
Contoh:
AddxxxxListener dalam pemrograman GUI adalah semua mode pengamat.
Misalnya, menambahkan acara mendengarkan ke klik tombol, menambahkan acara mendengarkan ke keyboard, dll.
Tiga kategori penting dari pola pengamat:
Sumber acara didengarkan, yaitu objek yang kami gunakan.
Pendengar terdaftar secara khusus digunakan untuk mendengarkan objek yang saat ini digunakan.
Acara Acara Objek adalah objek yang didengarkan!
Pertama -tama mari kita lihat versi sederhana dari monitor yang ditulis sendiri.
Versi Sederhana:
Ada sumber acara, pendengar, dan kelas tes.
Acara akan diimplementasikan dalam versi lengkap berikutnya.
Langkah Pengembangan:
Langkah 1: Menerapkan orang kelas yang perlu didengarkan.
Langkah 2: Menerapkan antarmuka mendengarkan IpersonRunListener.
Langkah 3: Di kelas orang, berikan satu metode (atau beberapa, saya menyediakan 2 metode di sini) untuk mendaftarkan kelas IpersonRunListener, mis. AddBefore dan AddAfter
Langkah 4: Contoh kelas iPersonRunListener harus dipertahankan di kelas orang.
Langkah 5: Saat memanggil orang itu. Metode Run, tentukan apakah IpersonRunListener adalah NULL, dan jika bukan NULL, sebut metode pertempurannya.
Langkah 6: Di kelas demo, orang instantiate dan mendaftar pendengar.
Orang:
paket cn.hncu.designpattern1; Public Class Person {private string name; Private IpersonRunListener Listener1; Private IpersonRunListener Listener2; orang publik (nama string) {super (); this.name = name; } public void run () {if (listener1! = null) {listener1.fighting (); } System.out.println (name+"run ..."); if (listener2! = null) {listener2.fightting (); }} public void addBefore (iPersonRunListener Listener) {this.listener1 = pendengar; } public void addafter (iPersonRunListener listener) {this.listener2 = listener; }} antarmuka ipersonrunlistener {public void fighting ();}Demo
paket cn.hncu.designpattern1; demo kelas publik {public static void main (string [] args) {person person = orang baru ("zhang san"); IPersonRunListener listener = new iPersonRunListener () {@Override public void fighting () {// Ada banyak hal yang dapat Anda lakukan di sini, tidak hanya output // Namun, karena Anda belum menulis objek acara, Anda tidak bisa mendapatkan System.out.println ("Bersiaplah untuk itu terlebih dahulu ..."); }}; person.addbefore (pendengar); A = a a () baru; person.addafter (a); orang.run (); }} kelas A mengimplementasikan iPersonRunListener {@Override public void fighting () {// Ada banyak hal yang dapat Anda lakukan di sini, tidak hanya output // Namun, karena Anda belum menulis objek acara, Anda tidak bisa mendapatkan system.out.println dipanggil oleh siapa itu ("Run, Rest ..."); }}Keluaran:
Tambahkan sumber acara dalam versi lengkap:
Di sini, objek acara-acara telah ditambahkan ke yang sebelumnya. Itu dianggap sebagai versi lengkap.
Langkah Pengembangan:
Langkah 1: Terus tambahkan kelas PersonEvent berdasarkan halaman sebelumnya (perhatikan bahwa saya mengatakan itu adalah kelas, bukan antarmuka), mewakili objek acara.
Langkah 2: Tambahkan atribut seseorang ke objek PersonEvent untuk mengidentifikasi objek sumber acara.
Langkah 3: Modifikasi metode pertarungan dari antarmuka orang yang didistenkan dan biarkan menerima parameter personvent.
Langkah 4: Dalam metode Run Class Person, jika ditentukan bahwa properti yang didistenkan oleh orang tidak kosong, metode pertempuran disebut, personvent dipakai dan metode pertempuran diteruskan ke metode pertempuran.
Langkah 5: Dalam metode utama, uji apakah itu objek yang sama melalui metode Getsource dari PersonEvent.
Orang.java
paket cn.hncu.designpattern2; Public Class Person {private string name; pendengar private iPersonRistener; orang publik (nama string) {super (); this.name = name; } public void run () {System.out.println (Nama+"Mulai berjalan ..."); if (listener! = null) {listener.fighting (new personEvent (this)); }} public void addPersonListener (iPersonRunListener listener) {this.listener = pendengar; } public string getName () {return name; } @Override public string toString () {return "person [name =" + name + ", listener =" + listener + "]"; }} antarmuka ipersonrunlistener {public void fighting (personevent pe);} class personEvent {person p = null; Public PersonEvent (Person P) {this.p = p; } public string getName () {return p.getName (); } objek publik getSource () {return p; }} // Kita juga dapat menulis kelas dasar yang membantu kita menerapkan antarmuka // itu menulis templat umum kita. Jika kita mewarisi kelas ini, kita dapat berhenti menulisnya. // Jika ada fungsi yang berbeda, kami akan menulisnya sendiri untuk mengesampingkan kelas ini kelas ini DefaultCatListener mengimplementasikan IpersonRunListener {@Override public void fighting (personevent pe) {System.out.println ("Tindakan default ..."); }}Demo.java
paket cn.hncu.designpattern2; demo kelas publik {public static void main (string [] args) {person p1 = orang baru ("zhang san"); Orang p2 = orang baru ("jack"); IPersonRunListener listener = new iPersonRunListener () {@Override public void fighting (personevent pe) {System.out.println (pe.getSource ()+"telah dijalankan ..."); if (pe.getName (). Equals ("Zhang San")) {System.out.println (pe.getName ()+"dijalankan ke tempat pertama ..."); }}}}; P1.AddperSonListener (pendengar); p2.addperersonListener (pendengar); p1.run (); p2.run (); Orang p3 = orang baru ("li si"); P3.AddperSonListener (DefaultCatListener baru ()); p3.run (); }}Hasil demo:
Ini adalah prinsip dasar. Jika Anda mengubah output acara di dalamnya menjadi tindakan yang Anda butuhkan, Anda dapat menyadari fungsi yang Anda inginkan. Tambahkan pendengar dan Anda dapat menghubungi metode yang ingin Anda hubungi sebelum atau sesudah metode jalankan dan lakukan tindakan yang ingin Anda lakukan!
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.