# Observer Deseni

Adres: https://softwaredictionary.org/tr/terimler/observer-pattern
Kategori: Yazılım Mimarisi
Son güncelleme: 2026-09-30
İngilizcesi: Observer Pattern
Türkçe karşılığı: gözlemci deseni
Okunuşu: ıbzörvır petırn

Kısaca: Observer deseni, subject adlı bir nesnenin durumu değiştiğinde abone listesini otomatik olarak bilgilendirdiği davranışsal bir tasarım desenidir.

## Observer deseni nedir?

Observer deseni, nesneler arasında bire-çok bir ilişki tanımlar. Subject adı verilen bir nesne, ilgilenen nesnelerin (observer) listesini tutar ve verisinin değişmesi gibi bir şey olduğunda her birini çağırır. Observer'lar istedikleri zaman abone olup ayrılabilir; subject'in onlar hakkında, onları nasıl bilgilendireceği dışında hiçbir şey bilmesi gerekmez.

Uygulamada subject, `subscribe` ve `unsubscribe` gibi metotlar sunar ve kayıtlı her callback'i bir `notify` adımında çağırır. Web geliştiricileri bu deseni sürekli kullanır: DOM'daki `addEventListener`, Node.js'teki event emitter'lar ve arayüz framework'lerindeki reaktif durum hep bunu izler. Bir düğmeye tıklandığında ya da saklanan bir değer değiştiğinde kayıtlı her dinleyici çalışır.

Bülten iyi bir benzetmedir: okurlar abone olur, yayıncı her yeni sayıyı listedeki herkese gönderir ve okurlar istedikleri zaman abonelikten çıkabilir. Yayıncının okurların kim olduğunu ya da sayıyla ne yaptıklarını bilmesi gerekmez. Bu gevşek bağlılık, bir olaya yeni tepkiler eklemenizi, olayı tetikleyen kodu değiştirmeden mümkün kılar.

Observer deseni sıklıkla publish-subscribe (yayınla-abone ol) ile karıştırılır. Observer deseninde observer'lar doğrudan subject'e kaydolur ve bildirim genellikle tek bir program içinde eşzamanlı gerçekleşir; publish-subscribe'da ise yayıncılar ve aboneler birbirini tanımaz ve çoğunlukla servisler arasında, ayrı bir aracı (broker) ya da mesaj kuyruğu üzerinden iletişim kurar. Sık yapılan bir hata abonelikten çıkmayı unutmaktır; bu, kullanılmayan nesneleri bellekte tutar ve bellek sızıntılarına yol açar.

## Önemli noktalar

- Subject, durumu değiştiğinde kayıtlı tüm observer'larını bilgilendirir.
- Observer'lar çalışma zamanında abone olup ayrılabilir.
- Bir olayı tetikleyen kod ile ona tepki veren kodu birbirinden ayırır.
- DOM olay dinleyicileri ve Node.js event emitter'lar gündelik örneklerdir.
- Bellek sızıntılarını önlemek için artık gerekmeyen observer'ların aboneliğini iptal edin.

## Örnek: JavaScript'te basit bir observer uygulaması

```javascript
class Subject {
  observers = [];
  subscribe(observer) {
    this.observers.push(observer);
    return () => (this.observers = this.observers.filter((o) => o !== observer));
  }
  notify(value) {
    this.observers.forEach((observer) => observer(value));
  }
}

const price = new Subject();
const unsubscribe = price.subscribe((p) => console.log("New price:", p));
price.notify(42); // New price: 42
unsubscribe();    // stop listening when no longer needed
```

## Sık sorulan sorular

**Observer deseni ile publish-subscribe arasındaki fark nedir?**

Observer deseninde observer'lar, kendilerini bilgilendiren subject'e doğrudan abone olur. Publish-subscribe'da araya bir aracı ya da olay kanalı girer; böylece yayıncılar ve aboneler birbirine hiç referans vermez, bu da ayrı servisler arası iletişime uygundur.

**Observer deseni nerelerde kullanılır?**

DOM olay dinleyicilerinde, Node.js event emitter'larında, reaktif arayüz durum yönetiminde, diğer hücreler değişince güncellenen hesap tablosu hücrelerinde ve bir programın birkaç bölümünün aynı olaya tepki vermesi gereken her yerde kullanılır.

**Observer deseninin dezavantajları nelerdir?**

Aboneliği hiç iptal edilmeyen observer'lar bellek sızıntılarına yol açabilir ve uzun bildirim zincirleri programın akışını takip etmeyi ve hata ayıklamayı zorlaştırabilir. Observer'ların çalışma sırası da genellikle garanti edilmez.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
