13 Ocak 2011 Perşembe

İzleyeci Deseni(Observer Pattern)

İzleyici Desenin yapısında rol alan iki tür sınıf vardır.İlki konu(subject) diye nitelendirilen, ikincisi ise belirli bir konuya kayıt olabilen veya çıkış yapabiliren izleyici(observer) sınıfıdır.Bu iki sınıfın çalışma prensibi söyledir.Bir konuya birden fazla izleyici kayıt olur,kayıtlı sınıflar konunun durumuna göre kendi fonksiyonlarını kullanarak bilgilendirilirler.Uml diagramı aşağıdaki gibidir.

Uml diagramını açıklayacak olursak.Konu(subject) arayüzünün izleyici(observer) ekleyip, çıkaran ve de bilgilendiren 3 fonksiyonu var.İzleyici(observer) arayüzünün ise konunun durum(state) bilgisi hakkında bilgilendirmek için kullanılan güncelle fonksiyonu var.
Şimdi bu desenin nerelerde kullanılabiliceğini ne için tasarlanmış olduğunu ve de fonksiyonlarının içinin nasıl yazılması gerektiğini anlamak için örnekler verelim.


Örnek.1:
Yaşamla alakalı bir örnek olarak.
Tasarım desenleri dersi veren bir öğretim kuruluşu var.
  • Bu dersi almak isteyenler kayıt olmak zorunda(izleyiciEkle() fonksiyonu).
  • Dersi alan kişilerin bir listesi olması gerekir ki dersleri anlatacağı yani konudan haberdar olacak izleyicileri bilsin.
  • Derse başladınız,Artık belirli bir konu hakkında size bilgi geliyor.Yani ders devam ettikçe konu güncelleniyor(izleyiciBilgilendir() fonksiyonu).
  • Daha sonra bu ders bitiyor ve çıkış yapıyorsunuz(izleyiciÇıkar() fonksiyonu).Artık konunun durumu hakkında bilgi edinemiyorsunuz.
  • Tek bir tasarım desenleri dersi var fakat birden fazla öğrenci olabiliyor.
Burada tasarım desenleri dersi konu(subject) sınıfı,öğrencileri ise izleyici(observer) sınıfı oluyor.Ders hakkında bilgilendiriliyorsunuz fakat bunun ile öğrenci ne yapıyor dersi anlatanı ilgilendirmiyor, izleyicinin ne yaptığı konuyu ilgilendirmiyor.Çünkü siz dersi anlatan için öğrenci,konu için sadece bir izleyici(observer)siniz.Yani arada sıkı bir bağ yok.(loosely coupled)