Subject RxJava-র একটি গুরুত্বপূর্ণ component যা Observable এবং Observer উভয়ের মতো কাজ করে। এটি একই সময়ে data emit (প্রকাশ) এবং consume (গ্রহণ) করতে পারে।
Subject-এর ধরন
RxJava-তে বিভিন্ন প্রকারের Subject রয়েছে, এবং প্রতিটির নিজস্ব ব্যবহার ক্ষেত্রে আলাদা বৈশিষ্ট্য থাকে। প্রধান Subject-গুলো হল:
- PublishSubject
- BehaviorSubject
- ReplaySubject
- AsyncSubject
1. PublishSubject
PublishSubject শুধুমাত্র subscribe হওয়ার পরবর্তী ডেটা emit করে। এটি পূর্ববর্তী ডেটা সংরক্ষণ করে না।
উদাহরণ:
import io.reactivex.subjects.PublishSubject;
public class PublishSubjectExample {
public static void main(String[] args) {
PublishSubject<String> subject = PublishSubject.create();
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Hello");
subject.onNext("RxJava");
// দ্বিতীয় Observer (পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: Subject
2. BehaviorSubject
BehaviorSubject সর্বশেষ emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সেটি প্রদান করে।
উদাহরণ:
import io.reactivex.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> subject = BehaviorSubject.create();
subject.onNext("Initial");
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Hello");
subject.onNext("RxJava");
// দ্বিতীয় Observer (পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Initial
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: RxJava
Observer 2: Subject
3. ReplaySubject
ReplaySubject সমস্ত emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সব ডেটা প্রদান করে।
উদাহরণ:
import io.reactivex.subjects.ReplaySubject;
public class ReplaySubjectExample {
public static void main(String[] args) {
ReplaySubject<String> subject = ReplaySubject.create();
subject.onNext("Initial");
subject.onNext("Hello");
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("RxJava");
// দ্বিতীয় Observer (পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Initial
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: Initial
Observer 2: Hello
Observer 2: RxJava
Observer 2: Subject
4. AsyncSubject
AsyncSubject শুধুমাত্র শেষ emit হওয়া ডেটা প্রদান করে, এবং onComplete() কল করার পর এটি সক্রিয় হয়।
উদাহরণ:
import io.reactivex.subjects.AsyncSubject;
public class AsyncSubjectExample {
public static void main(String[] args) {
AsyncSubject<String> subject = AsyncSubject.create();
subject.onNext("Initial");
subject.onNext("Hello");
subject.onNext("RxJava");
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Subject");
subject.onComplete();
// দ্বিতীয় Observer (onComplete এর পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
}
}
আউটপুট:
Observer 1: Subject
Observer 2: Subject
উপসংহার
RxJava-র Subject-গুলো বিভিন্ন প্রোগ্রামিং পরিস্থিতিতে ব্যবহারের জন্য অত্যন্ত উপযোগী।
| Subject প্রকার | ব্যবহার |
|---|---|
| PublishSubject | শুধুমাত্র subscribe হওয়ার পর emit হওয়া ডেটা প্রদান করে। |
| BehaviorSubject | সর্বশেষ emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সেটি প্রদান করে। |
| ReplaySubject | সমস্ত emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের প্রদান করে। |
| AsyncSubject | শুধুমাত্র শেষ emit হওয়া ডেটা প্রদান করে। |
প্রতিটি Subject নির্দিষ্ট পরিস্থিতিতে ব্যবহার করলে data streams পরিচালনা আরও কার্যকর হয়।
Read more