Latest web development tutorials

pola Observer

Ketika ada banyak hubungan antara objek, menggunakan pola pengamat (Observer Pattern). Sebagai contoh, ketika suatu objek diubah, itu akan secara otomatis memberitahukan benda yang tergantung. Pola pengamat milik pola perilaku.

pengenalan

Maksud: mendefinisikan dependensi antara objek satu-ke-banyak, ketika keadaan suatu objek berubah, semua objek yang bergantung padanya akan diberitahu dan diperbarui secara otomatis.

Terutama untuk mengatasi: keadaan pemberitahuan perubahan objek untuk masalah benda-benda lain, tetapi juga memperhitungkan kemudahan penggunaan dan kopling rendah, memastikan tingkat tinggi kolaborasi.

Kapan menggunakan: sebuah objek (objek target) perubahan negara, semua benda tergantung (benda pengamat) akan diberitahu, pemberitahuan disiarkan.

Cara untuk memperbaiki: penggunaan teknologi berorientasi objek, ketergantungan ini dapat melemah.

Kode kunci: kelas abstrak memiliki ArrayList disimpan pengamat.

contoh aplikasi: 1, ketika lelang, juru lelang mengamati harga tertinggi, dan kemudian memberitahu peserta tender lainnya tawaran.2, Perjalanan ke Barat dalam Wukong permintaan penyerahan Red Boy Buddha, air Buddha tumpah di atas lantai sebuah memprovokasi kura-kura tua, kura-kura ini adalah pengamat, ia mengamati bahwa tindakan Buddha penyiraman.

Keuntungan: 1, pengamat dan yang diamati adalah abstrak digabungkan.2, untuk membentuk mekanisme pemicu.

Kekurangan: 1, jika objek yang diamati memiliki banyak pengamat langsung dan tidak langsung, itu akan memberitahu semua pengamat untuk menghabiskan banyak waktu.2, jika ada ketergantungan melingkar antara pengamat dan target diamati, mengamati target akan memicu panggilan untuk beredar di antara mereka, dapat menyebabkan sistem crash. 3, pengamat mode tidak ada mekanisme untuk membiarkan pemirsa tahu penonton adalah bagaimana perubahan yang diamati, tapi hanya tahu bahwa perubahan sasaran pengamatan.

skenario penggunaan: 1, beberapa metode yang umum sub-kelas, dan logika yang sama.2, penting, metode yang kompleks dapat dianggap sebagai metode Template.

Catatan: 1, JAWA sudah memiliki pengamat dukungan kelas modus.2, untuk menghindari referensi melingkar. 3, jika urutan eksekusi, pemirsa dapat menyebabkan kesalahan sistem terjebak, umumnya menggunakan modus asynchronous.

realisasi

Pola pengamat menggunakan tiga kelas Subjek, Observer dan Client. Tunduk pada objek Klien dengan objek dan pengamat adalah metode pengamat terikat terikat Client Solutions dari objek. Kami menciptakankelas Subjek,Observer kelas abstrak dan memperpanjang entitas kelas abstrak kelasObserver.

ObserverPatternDemo,kelas demonstrasi kami menggunakan objek kelas dan entitasSubjekuntuk menunjukkan pola Observer.

Pola pengamat diagram UML

Langkah 1

Buat kategori Subjek.

Subject.java

impor java.util.ArrayList;
import java.util.List;

public class Subjek {
	
   Daftar pribadi <Observer> pengamat 
      = New ArrayList <Observer> ();
   int negara swasta;

   public int getState () {
      kembali negara;
   }

   public void setState (negara int) {
      this.state = negara;
      notifyAllObservers ();
   }

   public void melampirkan (Observer Pengamat) {
      observers.add (pengamat);		
   }

   kekosongan notifyAllObservers publik () {
      untuk (Observer Pengamat: pengamat) {
         observer.update ();
      }
   } 	
}

Langkah 2

Membuat kelas Observer.

Observer.java

kelas abstrak publik Observer {
   dilindungi subjek Subjek;
   public pembaruan kekosongan abstrak ();
}

Langkah 3

Buat pengamat kelas entitas.

BinaryObserver.java

public class BinaryObserver meluas Observer {

   publik BinaryObserver (subjek Subjek) {
      this.subject = subjek;
      this.subject.attach (ini);
   }

   @ Override
   public void update () {
      System.out.println ( "String Binary:" 
      + Integer.toBinaryString (subject.getState ())); 
   }
}

OctalObserver.java

public class OctalObserver meluas Observer {

   publik OctalObserver (subjek Subjek) {
      this.subject = subjek;
      this.subject.attach (ini);
   }

   @ Override
   public void update () {
     System.out.println ( "Oktal String:" 
     + Integer.toOctalString (subject.getState ())); 
   }
}

HexaObserver.java

public class HexaObserver meluas Observer {

   HexaObserver publik (subjek Subjek) {
      this.subject = subjek;
      this.subject.attach (ini);
   }

   @ Override
   public void update () {
      System.out.println ( "Hex String:" 
      + Integer.toHexString (subject.getState ()) .toUpperCase ()); 
   }
}

Langkah 4

GunakanSubjekdan pengamat objek entitas.

ObserverPatternDemo.java

public class ObserverPatternDemo {
   public static void main (String [] args) {
      Subjek subjek = subjek baru ();

      HexaObserver baru (subjek);
      baru OctalObserver (subjek);
      baru BinaryObserver (subjek);

      System.out.println ( "Pertama perubahan negara: 15");	
      subject.setState (15);
      System.out.println ( "Kedua negara perubahan: 10");	
      subject.setState (10);
   }
}

Langkah 5

Verifikasi output.

Pertama perubahan state: 15
Hex String: F
String Oktal: 17
String biner: 1111
Kedua perubahan state: 10
Hex String: A
String Oktal: 12
String biner: 1010