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