Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?

Cevap

Observer, bir nesnenin (subject) durumu değiştiğinde ona abone olan nesnelere (observers) otomatik olarak haber vermesini sağlayan davranışsal bir desendir. Yayıncı ile aboneler birbirinin somut sınıfını bilmez, gevşek bağlıdır.

class EventEmitter:
    def __init__(self):
        self._listeners = {}

    def on(self, event, callback):
        self._listeners.setdefault(event, []).append(callback)
        return lambda: self._listeners[event].remove(callback)  # unsubscribe

    def emit(self, event, *args):
        for cb in list(self._listeners.get(event, [])):
            cb(*args)

orders = EventEmitter()
orders.on("created", lambda o: print(f"E-posta gönder: {o['id']}"))
orders.on("created", lambda o: print(f"Stoktan düş: {o['id']}"))

orders.emit("created", {"id": 42})

Sipariş servisi, e-posta veya stok modülünü bilmeden olayı yayınlar; yeni bir abone eklemek mevcut kodu değiştirmez.

Gerçek hayattan örnekler

  • DOM olayları: button.addEventListener("click", ...)
  • Node.js EventEmitter, RxJS Observable'ları
  • React state değişince bileşenlerin yeniden render edilmesi, Redux subscribe
  • MVC'de model değişince view'in güncellenmesi
  • Dağıtık sistemlerde pub/sub (Kafka, Redis Pub/Sub) aynı fikrin ölçeklenmiş hâlidir.

Dikkat edilecekler

  • Bellek sızıntısı: abonelikten çıkılmazsa observer'lar referans tutulduğu için toplanamaz (React'te useEffect cleanup bu yüzden önemlidir).
  • Bildirim sırası garanti edilmemeli.
  • Senkron bildirimde yavaş bir abone tüm akışı yavaşlatır; bir abonenin hatası diğerlerini engellememeli.
  • Zincirleme olaylar akışın takibini zorlaştırabilir.
  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.
  6. Interface ile abstract class arasındaki fark nedir?KolayOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle