Observer (Gözlemci) Pattern

Yusuf Çakal
Türkçe Yayın
Published in
2 min readOct 12, 2017

--

Tekrar merhaba, design pattern konularına kaldığımız yerden devam ediyoruz. Bir önce ki yazımızda builder (kurucu) pattern konusuna değinmiştik, nerelerde ve nasıl kullanılacağı hakkında bilgi vermiştik. Yazıyı aşağıya bırakıyorum.

Şimdi gelelim observer pattern felsefesine. Bu kalıp one-to-many olayını destekleyen tasarım deseni. Nasıl mı ? Mesela bir nesnenin değişikliğinden farklı nesneler etkilenecek ise bu kalıp tavsiye edilir. Bu yapı birçok yerde karışımıza çıkabilir.

Nerelerde Observer Pattern kullanmalıyım. ?

Örneğin bir alışveriş sitesinde bir ürüne indirim yapıldığında kullanıcılarınıza e-mail ile haber verilir iken bu kalıp kullanılabilir. Ya da en basitinden facebook da bir gruba üyesiniz grupta bildirimleri açtığınızda size (ve daha birçok kişiye) gelecek olan bildirim bu yapı ile olabilir.

Lafı çok fazla uzatmadan olayı örnek üzerinden anlatmak istiyorum. Kısaca örnekten bahsedeyim. Bir duyuru sistemimiz olduğunuz düşünün ve bu duyuruya kayıt olan kullanıcılara duyuru yapıldığında mesaj gönderilecek.

yukarı da gözlemci interface tanımladık duyurular bu interface üzerinden sağlanacak.

Observable interface’i ise duyuru sisteminde ki kullanıcıların temsili olarak düşünebilirsiniz.

NoticeObservable sınıfı ile Observable interface’ini genişleşttik ve gerekli özelleştirmeleri yaptık. Metotlarda ki yorum satırları size gerekli ipuçlarını verecektir.

Yukarı da görmüş olduğunuz iki tane kullanıcı sınıfımız var ikisi de Observer interface’ini implement etmiş yani artık ikisi de birer gözlemci ve Duyuru yapıldığında notify() metoduna gelen parametre ile duyuru okunacaktır.

ve son olarak main sınıfımız da yukarı da gibidir burada bazı şeyleri açıklama gereksimi duymaktayım. userMan ve userWoman’ı duyuruya ekledik ve notify ettikten sonra userWoman nesnesini duyurudan geri çıkardık ve bunu observable nesnesini göndererek yapmış olduk. addObserver metodunda farkettiyseniz kullanıcı sınıfını direk parametre geçmedik metodun aldığı parametre bir interface nesnesi yani addObserver şunu bilir ‘bana sadece Observer nesnesi geldi. UserMan, UserWoman onu ilgilendirmez.’. Eğer direk kullanıcı sınıfından birini parametre geçseydik bir bağımlılık oluştumuş olurduk ve başka bir kullanıcı parametresi geçtiğimizde o metodu overloading (aşırı yükleme) yapmak zorunda kalacaktık bu da bağımlılığı arttıracaktı. (Dependency Injection) Bunu önlemek adına interface üzerinden yapmayı tercih ettik bu kısıma dikkat etmenizi öneririm.

Bu yazı da anlatmak istediklerim bu kadar kafanıza takılan ya da anlamadığınız bir kısım olursa yorum yazarak bildirirseniz elimden geldiğince yardımcı olmaya çalışırım.

--

--