Java’da Callback/Listener yapısı

Bu blog yazısına girdiğinize göre programlama konusunda epey bir yol katettiniz. Şimdi sıra geldi callback (veya listener’da diyebiliriz) yapısını anlamaya. Şu ana kadar JAVA veya onun gibi bir nesneye dayalı programlama dili ile kod yazmışsanız ve hala “yahu bu Interface’ler bana hiç lazım olmadı, nerede kullanıyoruz bunları?” gibi bir ifade kullandıysanız, bu yazı sizin için güzel bir örnek olacak diye umuyorum.

Her zamanki gibi bu budur, şu da şudur tanımlamaları yerine olabildiğince basit bir örnekle konuya açıklık getirmeye çalışacağım. Düşündüm düşündüm, aklıma sadece random bir sayı üreten bir konsol uygulaması yazmak geldi. (çok yaratıcıyım değil mi? :) )

Neyse, çok uzatmadan başlayalım. Şimdi bir RandomGenerator classımız olsun içinde de random sayı üreten bir method. Bunu ekrana basmak için de bir Main Class’ına ihtiyaç var. Normal yöntemde yapacağım şey şöyle olurdu:

RandomGenerator.java

Main.java

Enter’a bastıkça yeni bir random number’ı ekrana basıyorum.

Şimdi olaya bir de farklı bir açıdan bakalım. Eğer ben random bir sayı üretilmesi event’ını sürekli dinlemek istiyorsam, yani random sayı üretildiğinde RandomGenerator tarafından “random sayı üretildi al bunu ne yapmak istiyorsan yap” diye bir haber almak istiyor olabilirim. Yani bir olay olduğunda belli bir kod bloğunun çalıştırılmasını istiyorum. Bu durumda içinde onNumberGenerated() isimli bir method olan OnNumberGeneratedListener diye bir Interface yaratıyorum.

OnNumberGeneratedListener.java

Main.java

Bu da yeni RandomGenerator’ımız;

RandomGenerator.java

Buradaki örnek çok basit olduğu için bu yapı size çok anlamsız gelmiş olabilir. Fakat, yapılan işlemin random bir sayı üretmek dışında daha komplike bir olay olduğunu düşünürsek daha anlamlı gelecektir. Örneğin, bir butona tıklandığında yapılacaklar için bir callback’e ihtiyacınız var veya arkaplanda yapılan bir işlemin sonucunu UI’a aktarırken yine bu yapıdan faydalanabilirsiniz.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.