Bahasa Java berisi banyak dukungan langsung untuk pola desain, seperti mode perintah, mode agen, mengamati mode, dll. Meskipun Java memberikan dukungan untuk pola ini sangat sederhana dan tidak dapat memenuhi aplikasi yang lebih kompleks. Tetapi dalam skenario sederhana, menggunakan kelas -kelas ini seringkali dapat mencapai efek melihat bayangan. Karena itu, jika Anda tidak memiliki kebutuhan khusus, lebih baik menggunakan kelas -kelas ini di Java.
Mode pengamat, juga dikenal sebagai mode pemantauan dan mode pengamat, adalah salah satu mode desain klasik (salah satu GOF). Dalam bahasa Java, terutama ada kelas dan antarmuka berikut yang didukung untuk pola ini, semua dari paket Java.Beans:
java.beans.propertychangelistener (antarmuka) java.beans.propertychangesupport (kelas) java.beans.propertychangeEvent (kelas) java.beans.propertychangeListenerererererer
Ini adalah antarmuka. Jelas, semua kelas yang mengimplementasikan antarmuka ini adalah pendengar (atau pengamat), yang akan tertarik pada beberapa perubahan dalam objek yang didengarkan. Antarmuka ini memiliki satu metode:
public void propertychange (PropertyChangeEvent EVT) {// TODO Metode yang dihasilkan otomatis Stub} Definisi antarmuka sederhana dan fungsinya jelas. Terima suatu acara (PropertyChangeEvent yang dihasilkan oleh pendengar), dan kemudian bereaksi berdasarkan acara ini.
java.beans.propertychangesupport
Kelas ini digunakan di kelas pengamat, untuk menyelamatkan pengamat yang terdaftar dan untuk memberi mereka perubahan pengamat. Tidak banyak metode untuk jenis ini, tetapi masih hanya diperkenalkan 100% dari mereka, jika tidak Anda tidak akan dapat menggunakan otak Anda, haha.
Public PropertyChangesupport (Object SourceBean)
Ini adalah konstruktor, dan parameternya adalah pendengar. PropertyChangeListener umumnya digunakan sebagai properti pendengar. Umumnya digunakan sebagai berikut:
Private PropertyChangesupport listeners = new PropertyChangesupport (ini);
Perhatikan bahwa pendengar ini tidak hanya mewakili satu pendengar, ia mungkin sekelompok pendengar. Jadi siapa pendengar ini? Kali ini saya menggunakan metode berikut.
public void addPropertyChangeListener (pendengar PropertyChangeListener)
Kelas ini terlalu mudah, tambahkan pendengar. Sama seperti Kongres Nasional Partai Komunis Tiongkok ke -17, jika seorang reporter ingin wawancara, ia harus mendaftar terlebih dahulu. Jelas metode ini dapat dipanggil beberapa kali (tambahkan). Tambahan dan pengurangan:
public void removePropertyChangeListener (pendengar PropertyChangeListener)
Jika monitor tidak tertarik pada perubahan pada orang yang dipantau, ia akan diusir oleh monitor.
Oke, semua wartawan ada di sini, dan jika ada perubahan dalam monitor, sekarang saatnya untuk memberi tahu orang tersebut. Gunakan salah satu metode berikut:
public void firePropertyChange(PropertyChangeEvent evt) public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) public void firePropertyChange(String propertyName, int oldValue, int newValue) public void firePropertyChange(String propertyName, Object oldValue, Object newValue)
Bahkan, parameter dari tiga metode terakhir akan dienkapsulasi ke dalam PropertyChangeEvent, dan kemudian metode pertama akan dipanggil. Namun, pada kenyataannya, kami masih suka secara langsung memanggil salah satu dari tiga yang terakhir, dan kami tidak peduli tentang enkapsulasi. Tiga metode terakhir memiliki tiga parameter, di antaranya OldValue dan NewValue adalah nilai sebelum dan sesudah. Yang pertama adalah mengubah nama sehingga pendengar dapat merespons berdasarkan nama ini. Sama seperti dalam pertemuan, semua informasi pemerintah akan didengar oleh wartawan, tetapi beberapa jurnalis hanya tertarik pada masalah Taiwan, sementara yang lain tertarik pada masalah China-Jepang.
Itu semua pengantar metode propertiChangesupport. Perhatikan bahwa karena propertychangesupport digunakan di kelas (biasanya model) pengamat, metodenya hanya disebut di sini ketika mereka diamati.
java.beans.propertychangeEvent
Saya terlalu malas untuk memperkenalkan kelas ini, lihat saja metode utamanya dan pahami apa yang sedang terjadi
Publik String getPropername () Objek publik getNewValue () Objek publik getOldValue ()
Ada tiga kategori, dan yang lainnya adalah menganalisis masalah tertentu. Mari kita ambil contoh, pertama -tama, pengamat:
domain kelas publik {ID string yang dilindungi; nama string yang dilindungi; Desname String yang Dilindungi; Property PropertyChangesupport listeners = New PropertyChangesupport (ini); string publik getId () {return id; } public void setId (string id) {this.id = id; firepropertychange ("domain.id", null, id); } public String getDesName () {return desname; } public void setDesName (string desname) {this.desName = desname; firepropertychange ("domain.desname", null, desname); } public string getName () {return name; } public void setName (name string) {this.name = name; firepropertychange ("domain.name", null, name); } public void addPropertyChangeListener (PropertyChangeListener listener) {listeners.addPropertyChangeListener (pendengar); } public void firePropertyChange (string propname, objek oldvalue, objek newValue) {listeners.firepropertychange (propname, oldvalue, newValue); } public void removePropertyChangeListener (PropertyChangeListener Listener) {listeners.removepropertyChangeListener (pendengar); }} Beberapa orang tertarik pada tiga atribut domain. Ini salah satu dari orang -orang ini:
kelas publik SimpleObserver mengimplementasikan PropertyChangeListener {.... @Override public voidChange (PropertyChangeEvent evt) {if (evt.getPropertyname (). Equals ("Domain.Name")) {// melakukan beberapa pekerjaan}}} Berikut adalah kelas tes sederhana:
kelas publik sederhana {public static void main (string [] args) {SimpleObserver Observer = new SimpleObserver (); Domain domain = domain baru (); domain.addpropertychangelistener (pengamat); domain.setname ("yangsq"); ......}}Jelas, pelaksanaan metode PropertyChange di SimpleObserver dapat diamati.