Observer
- Python kursu
- İleri seviye
- Ders 64/83
- 5 dk
Observer desenini öğrenirsin.
Observer
Observer, bir nesnenin durum değişikliğini abonelere bildirmesini sağlar. Subject, aboneleri bir listede tutar; notify çağrıldığında her birine haber verir.
class Subject:
def __init__(self):
self._observers = []
def subscribe(self, obs):
self._observers.append(obs)
def notify(self, value):
for obs in self._observers:
obs(value)Aboneler çağrılabilirdir; bu, olay güdümlü arayüzlerde ve mesajlaşma sistemlerinde yaygındır.
abone ekleme ve bildirim
Abone eklemek için subscribe(obs) çağrılır; obs çağrılabilirdir (işlev veya __call__ yöntemi olan nesne). Bildirim, notify(value) ile yapılır.
def log_observer(value):
print(f"log: {value}")
s = Subject()
s.subscribe(log_observer)
s.notify("merhaba") # log: merhabaBirden çok abone eklenebilir; hepsi aynı değeri alır. Bu, günlükleme, önbellek invalidasyonu ve UI güncellemeleri için uygundur.
Uygulama Observer ile günlükle
class Subject: tanımla. __init__ içinde self._observers = []. def subscribe(self, obs): metodu self._observers.append(obs) yapsın. def notify(self, value): metodu for obs in self._observers: obs(value) yapsın. def log_observer(value): işlevi print(f"log: {value}") yapsın. s = Subject() oluştur, s.subscribe(log_observer) ve s.notify("merhaba") çağrısı yap.
Başlangıç kodu
# Subject sınıfını tanımla (observers listesi, subscribe ve notify)
# log_observer işlevini tanımla (value'yu yazdırır)
# bir Subject oluştur, log_observer'ı abone ekle ve notify çağrısı yapÖrnek çözüm
class Subject:
def __init__(self):
self._observers = []
def subscribe(self, obs):
self._observers.append(obs)
def notify(self, value):
for obs in self._observers:
obs(value)
def log_observer(value):
print(f"log: {value}")
s = Subject()
s.subscribe(log_observer)
s.notify("merhaba")Beklenen çıktı
log: merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Observer deseninde Subject aboneleri nerede tutar?
- Bir kümede
- Bir dosyada
- Bir listede Doğru cevap
- Bir veritabanında
Açıklama: Subject, aboneleri _observers listesinde tutar.
2 notify gövdesini tamamla
def notify(self, value):
for obs in self._observers:
____(value)
def notify(self, value):
for obs in self._observers:
obs(value)
Açıklama: obs(value) ile her abone çağrılır.
3 Observer kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
Subject |
Bildirimi yapar |
subscribe |
Abone ekler |
notify |
Haber verir |
obs(value) |
Aboneyi çağırır |