Observer Kalıbı: Olay Bildirimi
Bir hisse senedi fiyatı sisteminde olay üreticilerini tüketicilerden ayırmak için Observer uygulayın.
Observer Kalıbı: Olay Bildirimi, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Observer Deseninin Amacı
Observer (Yayınla-Abone Ol olarak da adlandırılır), bire çok bağımlılık tanımlar: Subject durumunu değiştirdiğinde, kayıtlı tüm Observer'lar otomatik olarak bilgilendirilir.
Subject ve Observer Arayüzleri
Subject, bir Observer listesi tutar ve onları bilgilendirir. Observer'lar, olaylara tepki vermek için bir update metodu uygular.
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);
}Somut Subject: Borsa Fiyat Takibi
Subject durumu saklar ve durum her değiştiğinde notifyObservers çağrısını yapar. Observer listesini yönetir.
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);
}
}Somut Observer'lar
Her Observer, aynı bildirime farklı tepki verir. Subject'i değiştirmeden çalışma zamanında Observer ekleyebilirsiniz.
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);
}
}Observer'ları Bağlama
Observer'ları Subject'e kaydedin. Subject değiştiğinde hepsi tepki verir. Güncellemeleri almayı durdurmak için kayıtlarını kaldırın.
StockTicker ticker = new StockTicker();
ticker.addObserver(new AlertSystem());
ticker.addObserver(new Logger());
ticker.setPrice(95.5); // both observers notifiedjava.util.Observable — Kullanımdan Kaldırıldı
JDK'da java.util.Observable ve java.util.Observer bulunuyordu; ancak bunlar Java 9'dan beri kullanımdan kaldırılmıştır. Kendi uygulamanızı yazın veya RxJava ya da Project Reactor gibi tepkisel kütüphaneler kullanın.
PropertyChangeListener
Java bean'leri, Swing ve JavaFX'te yoğun biçimde kullanılan bean özelliklerindeki değişiklikler için yerleşik bir Observer mekanizması olan PropertyChangeSupport sağlar.
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);
}
}Tüketici ile İşlevsel Observer
Özel bir arayüz yerine hafif bir Observer olarak Consumer<T> kullanın — basit olay geri çağırmaları için idealdir.
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 ve Olay Veri Yolu Karşılaştırması
Bir olay veri yolu (Guava EventBus gibi), Subject ile Observer arasındaki ayrımı daha da artırır — Subject, kimin dinlediğini bilmeden olayları veri yoluna gönderir. Observer'lar metot açıklamasıyla abone olur.
// Guava EventBus example
EventBus bus = new EventBus();
bus.register(new Logger()); // subscribe
bus.post(new PriceEvent(95.5)); // publishObserver'da İş Parçacığı Güvenliği
Observer'lar birden çok iş parçacığından eklenip kaldırılabiliyorsa listeyi synchronized ile koruyun veya bildirimlerin yoğun olduğu iş yükleri için CopyOnWriteArrayList kullanın.
private final List<Observer> observers = new CopyOnWriteArrayList<>();Bellek Sızıntılarını Önleme
Observer listesindeki güçlü başvurular çöp toplayıcının çalışmasını engeller. WeakReference<Observer> kullanın veya artık ihtiyaç duyulmayan Observer'ların kayıtlarını her zaman kaldırın.
Gerçek Çerçevelerde Observer
Spring'in ApplicationEventPublisher bileşeni, Android LiveData ve JavaFX özellikleri, farklı soyutlama düzeylerindeki Observer deseni uygulamalarının tümüdür.
Kısa Kontrol
Observer deseninin temel faydası nedir?
Özet
Observer, bire çok bildirim zinciri tanımlar. Arayüzler veya işlevsel tüketiciler aracılığıyla uygulanabilir. İş parçacığı güvenliği için CopyOnWriteArrayList kullanın ve sızıntıları önlemek için Observer'ların kayıtlarını her zaman kaldırın.
Sıkça Sorulan Sorular
“Observer Kalıbı: Olay Bildirimi” dersi ücretsiz mi?
Evet — “Observer Kalıbı: Olay Bildirimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Observer Kalıbı: Olay Bildirimi” dersinde ne öğreneceğim?
Bir hisse senedi fiyatı sisteminde olay üreticilerini tüketicilerden ayırmak için Observer uygulayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Observer Kalıbı: Olay Bildirimi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Observer Kalıbı: Olay Bildirimi
- Strategy Kalıbı: Değiştirilebilir Algoritmalar
- Command Kalıbı: Eylemleri Kapsülleme
- Template Method: Algoritma İskeletlerini Tanımlama