Reactive katmanı
- Java kursu
- Uzman
- Ders 43/46
- 6 dk
Flow API ile reaktif akış yazarsın.
reaktif yayın katmanı
Reaktif katman, veriyi iterek (push) yayan bir model kurar. Subscriber arabirimi onNext(String item) metoduyla öğeleri tüketir. SimplePublisher abone listesi tutar; publish her aboneye onNext çağrısı yapar.
Bu, reaktif akışların (Reactive Streams) özüdür: yayıcı, abonelerine öğe iter. Harici bir kütüphane olmadan düz Java ile kurulur.
fonksiyonel arabirim ve lambda
Subscriber tek soyut metotlu bir arabirimdir; yani fonksiyonel arabirim. Bu yüzden anonim sınıf yerine lambda ile yazılabilir: s -> System.out.println("got: " + s). Derleyici, hedef türden s'in String olduğunu çıkarır.
Bu, kodu kısaltır ve okunurluğu artırır. subscribe metodu bir Subscriber bekler; lambda otomatik olarak ona dönüştürülür.
Uygulama Subscriber ve SimplePublisher sınıflarını yaz
Üstteki yapıya interface Subscriber ekle; void onNext(String item); metodu olsun. class SimplePublisher tanımla; aboneleri bir listede tutsun, void subscribe(Subscriber s) metodu abone eklesin, void publish(String item) metodu her aboneye s.onNext(item) çağırsın. main içinde SimplePublisher p = new SimplePublisher(); oluştur, p.subscribe(s -> System.out.println("got: " + s)); ile abone ol ve p.publish("hello"); çağır.
Başlangıç kodu
@interface Service {}
@Service
class HelloService {
String greet() { return "hello"; }
}
public class Main {
public static void main(String[] args) {
HelloService s = new HelloService();
System.out.println("service ready: " + s.greet());
}
}Örnek çözüm
@interface Service {}
@Service
class HelloService {
String greet() { return "hello"; }
}
interface Subscriber {
void onNext(String item);
}
class SimplePublisher {
java.util.List<Subscriber> subs = new java.util.ArrayList<>();
void subscribe(Subscriber s) { subs.add(s); }
void publish(String item) {
for (Subscriber s : subs) s.onNext(item);
}
}
public class Main {
public static void main(String[] args) {
SimplePublisher p = new SimplePublisher();
p.subscribe(s -> System.out.println("got: " + s));
p.publish("hello");
}
}Beklenen çıktı
got: hello
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 abone metodunu tamamla
void ____(String item);
void onNext(String item);
Açıklama: void onNext(String item); abone metodudur.
2 Reaktif akışta Subscriber ne yapar?
- Dosya açar
- Sınıfı derler
- Çöp toplar
- Öğeleri tüketir Doğru cevap
Açıklama: Subscriber, onNext metoduyla yayınlanan öğeleri tüketir.
3 reaktif öğeleri eşleştir
| Kavram | Anlamı |
|---|---|
Publisher |
Yayın yapan |
Subscriber |
Abone olan |
onNext |
Öğe olayı |
subscribe |
Abonelik ekleme |