Pola Observer: Notifikasi Acara
Implementasikan Observer untuk memisahkan produsen acara dari konsumennya dalam sistem harga saham.
Pola Observer: Notifikasi Acara adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Tujuan Observer
Observer, yang juga disebut Publikasi-Subskripsi, mendefinisikan dependensi satu-ke-banyak: ketika Subject mengubah keadaan, semua Observer yang terdaftar diberi tahu secara otomatis.
Antarmuka Subject dan Observer
Subject melacak daftar Observer dan memberi tahu mereka. Observer mengimplementasikan metode update untuk merespons peristiwa.
public interface Observer {
void update(String event, Object data);
}
public interface Subject {
void addObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers(String event, Object data);
}Subject Konkret: Pencatat Saham
Subject menyimpan keadaan dan memanggil notifyObservers setiap kali keadaan berubah. Subject mengelola daftar Observer.
public class StockTicker implements Subject {
private final List<Observer> observers = new ArrayList<>();
private double price;
public void addObserver(Observer o) { observers.add(o); }
public void removeObserver(Observer o) { observers.remove(o); }
public void setPrice(double p) {
this.price = p;
notifyObservers("PRICE_CHANGED", p);
}
public void notifyObservers(String ev, Object data) {
for (Observer o : observers) o.update(ev, data);
}
}Observer Konkret
Setiap Observer merespons notifikasi yang sama dengan cara berbeda. Tambahkan Observer saat aplikasi berjalan tanpa mengubah Subject.
public class AlertSystem implements Observer {
public void update(String ev, Object data) {
if ((double) data < 100) System.out.println("ALERT: Low price!");
}
}
public class Logger implements Observer {
public void update(String ev, Object data) {
System.out.println("LOG: " + ev + " = " + data);
}
}Menghubungkan Observer
Daftarkan Observer pada Subject. Semuanya akan merespons ketika Subject berubah. Batalkan pendaftaran untuk berhenti menerima pembaruan.
StockTicker ticker = new StockTicker();
ticker.addObserver(new AlertSystem());
ticker.addObserver(new Logger());
ticker.setPrice(95.5); // both observers notifiedjava.util.Observable — Tidak Digunakan Lagi
JDK memiliki java.util.Observable dan java.util.Observer, tetapi keduanya tidak digunakan lagi sejak Java 9. Implementasikan sendiri atau gunakan pustaka reaktif seperti RxJava atau Project Reactor.
PropertyChangeListener
Java bean menyediakan PropertyChangeSupport — mekanisme Observer bawaan untuk perubahan properti bean yang banyak digunakan dalam Swing dan JavaFX.
public class Model {
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private int value;
public void addPropertyChangeListener(PropertyChangeListener l) { pcs.addPropertyChangeListener(l); }
public void setValue(int v) {
int old = this.value; this.value = v;
pcs.firePropertyChange("value", old, v);
}
}Observer Fungsional dengan Consumer
Gunakan Consumer<T> sebagai Observer ringan, bukan antarmuka khusus — sangat cocok untuk panggilan balik peristiwa sederhana.
List<Consumer<Double>> listeners = new ArrayList<>();
listeners.add(p -> { if (p < 100) System.out.println("Low price"); });
listeners.add(p -> System.out.println("Price: " + p));
double newPrice = 95.5;
listeners.forEach(l -> l.accept(newPrice));Observer vs Bus Peristiwa
Bus peristiwa, seperti Guava EventBus, semakin memisahkan Subject dan Observer — Subject mengirimkan peristiwa ke bus tanpa mengetahui siapa yang mendengarkan. Observer berlangganan melalui anotasi metode.
// Guava EventBus example
EventBus bus = new EventBus();
bus.register(new Logger()); // subscribe
bus.post(new PriceEvent(95.5)); // publishKeamanan Utas dalam Observer
Jika Observer dapat ditambahkan atau dihapus dari beberapa utas, lindungi daftar tersebut dengan synchronized atau gunakan CopyOnWriteArrayList untuk beban kerja yang sering melakukan notifikasi.
private final List<Observer> observers = new CopyOnWriteArrayList<>();Menghindari Kebocoran Memori
Referensi kuat dalam daftar Observer mencegah GC bekerja. Gunakan WeakReference<Observer> atau selalu batalkan pendaftaran Observer ketika tidak lagi diperlukan.
Observer dalam Kerangka Kerja Nyata
ApplicationEventPublisher milik Spring, Android LiveData, dan properti JavaFX semuanya merupakan implementasi pola Observer pada tingkat abstraksi yang berbeda.
Pemeriksaan Singkat
Apa manfaat utama pola Observer?
Ringkasan
Observer mendefinisikan rantai notifikasi satu-ke-banyak. Implementasikan melalui antarmuka atau konsumen fungsional. Gunakan CopyOnWriteArrayList untuk keamanan utas dan selalu batalkan pendaftaran Observer untuk mencegah kebocoran.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Observer: Notifikasi Acara” gratis?
Ya — teks lengkap “Pola Observer: Notifikasi Acara” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Observer: Notifikasi Acara”?
Implementasikan Observer untuk memisahkan produsen acara dari konsumennya dalam sistem harga saham. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Pola Observer: Notifikasi Acara” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pola Observer: Notifikasi Acara
- Pola Strategy: Algoritma yang Dapat Dipertukarkan
- Pola Command: Merangkum Tindakan
- Template Method: Mendefinisikan Kerangka Algoritma