Mode Observer (kadang-kadang disebut Mode Penerbitan-Penjanggaan, Mode Model-View, Mode Source-Listener atau Slave Mode) adalah jenis mode desain perangkat lunak. Dalam mode ini, objek target mengelola semua objek pengamat yang bergantung padanya dan secara aktif mengeluarkan pemberitahuan ketika status berubah. Ini biasanya dicapai dengan memanggil metode masing -masing pengamat. Pola ini biasanya digunakan untuk mengimplementasikan sistem pemrosesan acara.
Mode pengamat dengan sempurna memisahkan pengamat dari objek yang diamati. Misalnya, antarmuka pengguna dapat digunakan sebagai pengamat, dan data bisnis adalah pengamat. Antarmuka pengguna mengamati perubahan dalam data bisnis. Setelah menemukan perubahan dalam data, itu akan ditampilkan pada antarmuka. Salah satu prinsip desain yang berorientasi objek adalah bahwa setiap kelas dalam sistem akan fokus pada satu fungsi, bukan aspek lain. Seseorang hanya melakukan satu hal dan melakukannya dengan baik. Mode pengamat menarik batasan yang jelas antara modul, meningkatkan pemeliharaan dan reusabilitas aplikasi.
Pola desain pengamat mendefinisikan ketergantungan satu-ke-banyak antara objek sehingga ketika keadaan objek berubah, semua objek yang bergantung padanya diberitahu dan secara otomatis disegarkan.
Metode Implementasi:
Ada banyak cara untuk mengimplementasikan pola pengamat, dan pada dasarnya, polanya harus berisi dua peran: pengamat dan objek yang diamati. Dalam contoh sekarang, data bisnis adalah objek yang harus diamati dan antarmuka pengguna adalah pengamat. Ada hubungan logis antara pengamat dan pengamat. Ketika pengamat berubah, pengamat akan mengamati perubahan tersebut dan merespons sesuai. Jika proses pengamatan seperti itu digunakan antara antarmuka pengguna dan data bisnis, dapat dipastikan bahwa batas antara antarmuka dan data ditarik. Dengan asumsi bahwa kebutuhan aplikasi berubah, kinerja antarmuka perlu dimodifikasi. Hanya antarmuka pengguna yang perlu direkonstruksi, dan data bisnis tidak perlu berubah.
1. Pengamat
(Observer) mendaftarkan dirinya dalam subjek, dan objek yang diamati menyimpan pengamat dalam sebuah wadah.
2. Diamati
Objek yang diamati memiliki beberapa perubahan (seperti yang ditunjukkan pada somechange pada gambar), dan semua pengamat terdaftar diperoleh dari wadah dan memberi tahu pengamat perubahan.
3. Mencabut pengamatan
Pengamat memberi tahu pengamat untuk membatalkan pengamatan dan menghilangkan pengamat dari wadah.
Ketika seorang pengamat mendaftarkan dirinya ke dalam wadah pengamat, pengamat tidak boleh bertanya tentang jenis spesifik pengamat, tetapi harus menggunakan antarmuka pengamat. Keuntungan ini adalah: dengan asumsi ada pengamat lain dalam program ini, selama pengamat ini juga diimplementasikan oleh antarmuka yang sama. Seseorang yang diamati dapat sesuai dengan banyak pengamat. Ketika orang yang diamati berubah, ia dapat memberi tahu semua pengamat satu per satu. Berdasarkan antarmuka, bukan implementasi spesifik - ini memberikan fleksibilitas yang lebih besar untuk program.
Kode demonstrasi:
Tentukan Peran Kelas Abstrak yang harus diamati:
test paket.edu.mainrole; impor java.util.arraylist; kelas abstrak abstrak publik {private arraylist <iobserver> list = new ArrayList <IobServer> (); public void add (iobserver Observer) {list.add (pengamat); } public void delete (iobserver Observer) {list.remove (pengamat); } public void nodifyoBserver (String newState) {for (iobserver Observer: list) {Observer.update (newState); }}} Subkelas Peran yang Diamati:
test paket.edu.mainrole; Peran kelas publik memperluas absrole {private string state; Public String getState () {return state; } public void change (String nupdate) {state = nupdate; this.nodifyoBserver (state); }} Tentukan antarmuka pengamat:
test paket.edu.mainrole; antarmuka publik iobserver {public void update (String newState); } Pengamat spesifik:
test paket.edu.mainrole; Observerobj1 kelas publik mengimplementasikan iobserver {private String Observerstate; @Override public void update (state string) {observerstate = state; System.out.println ("Status Observer 1 adalah:" + Observerstate); }} test paket.edu.mainrole; Observerobj2 kelas publik mengimplementasikan iobserver {private String Observerstate; @Override public void update (state string) {observerstate = state; System.out.println ("Status Observer 2 adalah:" + Observerstate); }} Uji Klien:
test paket.edu.mainrole; klien kelas publik { / ** * @param args * / public static void main (string [] args) {role subjek = role baru (); Iobserver Observer1 = pengamat baru (); Iobserver Observer2 = pengamat baru (); Subject.Add (Observer1); Subject.Add (Observer2); subjek.change ("Update!"); }} Hasil Menjalankan:
Keadaan Observer 1 adalah: UPDATE! Keadaan Observer 2 adalah: UPDATE!
Di atas adalah semua tentang artikel ini, dan saya harap ini akan menginspirasi Anda untuk belajar.