Artikel ini menjelaskan penggunaan mode pengamat untuk mengimplementasikan fungsi peringatan suhu tinggi dari Biro Meteorologi. Bagikan untuk referensi Anda, sebagai berikut:
1. Definisi Pola
Mode pengamat, juga dikenal sebagai Mode Publikasikan/Berlangganan. Pola pengamat mendefinisikan ketergantungan satu-ke-banyak antara objek. Ketika keadaan suatu objek berubah, semua objek yang bergantung padanya diberitahu dan diperbarui secara otomatis.
2. Contoh model
1 analisis pola
Kami meminjam peringatan suhu tinggi Biro Meteorologi untuk menggambarkan model ini.
2 Diagram Kelas Statis Pola Pengamat
3 contoh kode
3.1 Antarmuka Pengamat-IOBServer
Paket com.demo.observer; import com.demo.subject.isubject;/** * Antarmuka pengamat * @author * */antarmuka publik iobserver {// Metode pembaruan pembaruan public void (subjek isubject);}3.2 Topik Antarmuka-ISubject
Paket com.demo.subject; import com.demo.observer.iobserver;/** * Antarmuka topik (pengamat) * * @author * */antarmuka publik isubject {/** * Tambahkan pengamat * * @param Observer * @return */public boolean add (iobserver Observer); / ** * Hapus Pengamat * * @param Observer * @return */ public boolean hapus (iobserver Observer); / *** Beri tahu semua pengamat untuk memperbarui data*/ public void notifyAlloBserver (); / ** * Atur nilai suhu * * @param Suhu */ Public Void Settemperature (suhu float); / ** * Dapatkan peringatan suhu * * @return */ temperatureREport public ();}3.3 Implementasi subjek dalam topik tertentu
Paket com.demo.subject; impor java.util.iterator; impor java.util.vector; impor com.demo.observer.iobserver;/** * kelas implementasi tema (pengamat) * @Author */Subjek Kelas Publik ISubject {// suhu/** ** (i) Suhu 3) Suhu High Subjek Daily Daily hari berturut -turut. * * (2) Sinyal peringatan oranye suhu tinggi * * Standar: Suhu maksimum akan naik ke atas 37 ℃ dalam 24 jam. * * (Iii) Sinyal peringatan merah suhu tinggi * * Standar: Suhu maksimum akan naik ke atas 40 ℃ dalam waktu 24 jam. */ suhu pelampung pribadi; // Tingkat Peringatan Dini Private String WarningLevel; // Simpan Daftar Pengamat Vektor Akhir Pribadi <IobServer> Vektor; / *** Metode Konstruksi Inisialisasi Daftar Pengamat*/ Subjek Publik () {Vektor = Vektor baru <IobServer> (); } / *** Tambahkan pengamat* / public boolean add (iobserver pengamat) {if (pengamat! = Null &&! Vector.contains (pengamat)) {return vector.add (pengamat); } return false; } / *** hapus pengamat* / boolean publik hapus (iobserver pengamat) {return vector.remove (pengamat); } / *** Beri tahu semua pengamat untuk memperbarui data* / public void notifyAlloBserver () {System.out.println ("============ Departemen meteorologi merilis suhu tinggi" + ini. (iterator.hasnext ()) {(iterator.next ()). Update (this); "Yellow"; Public Void Settemperature (suhu float) {this.temperature = suhu;3.4 Pengamat Pribadi-Personobserver
Paket com.demo.observer; impor com.demo.subject.isubject;/** * Pengamat pengguna individu * @author * */kelas publik personobserver mengimplementasikan iobserver {pembaruan public void (subjek isubjek) {System.out.println ("Individu menerima peringatan suhu tinggi:" + subjek. }}3.5 Pengamat Pemerintah GovernmentObserver
Paket com.demo.observer; import com.demo.subject.isubject;/** * Pengamat pengguna pemerintah * @author * */kelas publik Pemerintah yang mengimplementasikan iobserver {pembaruan public void (subjek isubjek) {System.out.println ("Departemen Pemerintah menerima peringatan suhu tinggi:" + Subjek. }}3.6 CompanyObServer
package com.demo.observer;import com.demo.subject.ISubject;/** * Enterprise and institutions user observer* @author * */public class CompanyObserver implements IObserver{ public void update(ISubject subject) { System.out.println("Enterprises and institutions receive high temperature warning: " + subject.temperatureReport()); }}3.7 Biarkan sistem mulai menjalankan klien
Paket com.demo; impor java.util.random; impor com.demo.observer.companyobserver; impor com.demo.observer.governmentObserver; impor com.demo.observer.personBer; impor com.demo.subject.isubject; Impor Com.subject. @Author * */Klien kelas publik {/** * @param args */public static void main (string [] args) {// buat objek topik isubject subjek = subjek baru (); // tambahkan pengamat perusahaan dan institusi subjek.add (perusahaan baruobserver ()); // tambahkan pengamat subjek pengguna pemerintah. // tambahkan pengamat subjek pengguna individu. Acak acak = acak baru (); int i = 0; while (++ i <10) {// atur suhu acak subjek.settemperature (random.nextInt (45)); }}}4 hasil berjalan
======== Departemen meteorologi mengeluarkan alarm suhu tinggi kuning! ======
Perusahaan dan Institusi menerima peringatan suhu tinggi: Suhu: 35.0
Departemen Pemerintah menerima peringatan suhu tinggi: Suhu: 35.0
Individu menerima peringatan suhu tinggi: Suhu: 35.0
======== Departemen meteorologi mengeluarkan alarm merah untuk suhu tinggi! ======
Perusahaan dan Institusi menerima peringatan suhu tinggi: Suhu: 43.0
Departemen Pemerintah menerima peringatan suhu tinggi: Suhu: 43.0
Individu menerima peringatan suhu tinggi: Suhu: 43.0
======== Departemen meteorologi mengeluarkan alarm oranye suhu tinggi! ======
Perusahaan dan Institusi menerima peringatan suhu tinggi: Suhu: 37.0
Departemen Pemerintah Menerima Peringatan Suhu Tinggi: Suhu: 37.0
Individu menerima peringatan suhu tinggi: Suhu: 37.0
3. Prinsip -prinsip desain model ini
1 prinsip "tertutup terbuka"
2 prinsip tanggung jawab tunggal
3. Prinsip inversi ketergantungan
4. Gunakan kesempatan
1 Ketika model abstrak memiliki dua aspek, satu di antaranya tergantung pada yang lain, dan perlu dienkapsulasi menjadi objek independen dan secara independen berubah dan berulti banyak satu sama lain.
2 Ketika perubahan suatu objek dalam suatu sistem memerlukan mengubah konten objek lain secara bersamaan, tetapi Anda tidak tahu berapa banyak objek yang harus diubah.
3 Ketika perubahan suatu objek harus diberitahukan untuk membuat perubahan yang sesuai, tetapi tidak mungkin untuk menentukan siapa objek yang diberitahukan.
5. "Tarik Data" Diagram Kelas Statis
Yang disebut "data mendorong" berarti bahwa ketika objek yang diamati berubah, data yang relevan diteruskan ke pengamat melalui parameter, yang membentuk pengamat "mendorong data" kepada pengamat. Diagram kelas statis adalah sebagai berikut:
6. "Tarik Data" Diagram Kelas Statis
Yang disebut "Data Tarik", objek pengamat berisi referensi ke instance objek yang diamati. Ketika objek yang diamati berubah, tidak ada data yang akan diteruskan ke pengamat. Pengamat secara aktif memperoleh data yang relevan berdasarkan referensi objek yang diamati. Ini membentuk pengamat secara aktif "menarik data" dari objek yang diamati. Diagram kelas statis adalah sebagai berikut:
Untuk lebih banyak konten terkait Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Pendahuluan dan Tutorial Lanjutan tentang Pemrograman Berorientasi Objek Java", "Tutorial tentang Struktur Data Java dan Algorithma", "Ringkasan Keterampilan Operasi Java Java", "Ringkasan Operasi Java File dan Keterampilan Operasi Direktori" dan Ringkasan Java Operasi Java "," Ringkasan Operasi Java Keterampilan Operasi Direktori "dan" Ringkasan Java Ringkasan JAVA "
Saya harap artikel ini akan membantu pemrograman Java semua orang.