Observer
- Java kursu
- İleri seviye
- Ders 40/82
- 5 dk
Observer desenini öğrenirsin.
Observer deseni
Observer, bir nesnenin durum değişikliğini abonelerine bildirmesini sağlar. Bildirim gönderen tarafa Subject, alan tarafa Observer denir. Bu, yayınlama-abonelik (publish-subscribe) ilişkisidir.
Örnek: bir sıcaklık sensörü (Subject) değer değiştirdiğinde ekran ve günlük (Observer) bilgilendirilir. Subject, attach ile abone ekler, broadcast ile hepsine update çağrısı yapar. Aboneler istediği zaman eklenebilir; bu, sistem parçalarını birbirinden bağımsız tutar.
Kayıt ve bildirim akışı
Observer'lar attach ile bir listeye kaydedilir. Subject bir değişiklik olduğunda bu listeyi dolaşır ve her birine update çağrısı yapar. Bildirim bir dizgi ya da nesne olarak gönderilebilir.
Java'da abone listesi için genelde List<Observer> kullanılır. Çok sayıda abone varsa bildirim sırası önem kazanabilir; bu yüzden kayıt sırası korunur. Abonelikten çıkma için detach yöntemi de eklenebilir.
Uygulama Sensör abonelerini bilgilendir
Bir Observer arayüzü tanımla: void update(String msg). Screen sınıfı bu arayüzü uygulasın ve update içinde System.out.println ile "ekran: " + msg yazdırsın. Subject sınıfı attach(Observer) ve broadcast(String msg) yöntemlerini içersin; broadcast listedeki her Observer için update çağrısı yapsın. main içinde bir Screen abone ekle ve broadcast("sıcaklık 30") çağır.
Başlangıç kodu
// Observer arayüzünü ve Screen sınıfını tanımla
// Subject sınıfına attach ekle
// main içinde broadcast çağırÖrnek çözüm
import java.util.*;
interface Observer { void update(String msg); }
class Screen implements Observer {
public void update(String msg) { System.out.println("ekran: " + msg); }
}
class Subject {
private List<Observer> list = new ArrayList<>();
public void attach(Observer o) { list.add(o); }
public void broadcast(String msg) { for (Observer o : list) o.update(msg); }
}
public class ObserverDemo {
public static void main(String[] args) {
Subject s = new Subject();
s.attach(new Screen());
s.broadcast("sıcaklık 30");
}
}Beklenen çıktı
ekran: sıcaklık 30
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Observer rollerini eşleştir
| Kavram | Anlamı |
|---|---|
Subject |
Bildirim gönderir |
Observer |
Bildirimi alır |
attach |
Abone ekler |
update |
Bildirim yöntemi |
2 attach çağrısını tamamla
subject.____(new Screen());
subject.attach(new Screen());
Açıklama: attach ile yeni abone eklenir.
3 Observer deseninde aboneleri bilgilendiren taraf kimdir?
- Observer
- Arayüz
- Decorator
- Subject Doğru cevap
Açıklama: Subject, abone olan Observer'lara bildirim gönderir.