Image for post
Image for post

Observer (Gözlemci) Pattern

Yusuf Çakal
Oct 12, 2017 · 2 min read

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.

Düşünce ve fikir hürdür.

By Türkçe Yayın

‘Her düşünce, hür düşünce!’ diyerek çıktığımız yolda buluşmalarımız, kulüplerimiz ve yeni yazılar aracılığıyla daha fazla hayata dokunmaya çalışıyoruz. Bültenimize üye olup bize kapıyı aralık bırakın. Take a look

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Yusuf Çakal

Written by

yusuf.dev

Türkçe Yayın

Düşünce ve fikir hürdür. 'Türkçe Yayın' her düşünce ve fikri duyurmayı amaçlayan özgür blog ailesidir.

Yusuf Çakal

Written by

yusuf.dev

Türkçe Yayın

Düşünce ve fikir hürdür. 'Türkçe Yayın' her düşünce ve fikri duyurmayı amaçlayan özgür blog ailesidir.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store