PublishSubject, BehaviorSubject, ReplaySubject, এবং AsyncSubject

Subject এর ধারণা - আরএক্সজাভা (RxJava) - Java Technologies

250

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 ব্যবহার করবেন?

  1. PublishSubject: রিয়েল-টাইম ইভেন্ট শেয়ারিং।
  2. BehaviorSubject: সর্বশেষ ডেটা ধরে রাখা প্রয়োজন হলে।
  3. ReplaySubject: সমস্ত ইভেন্ট পুনরায় শেয়ার করতে চাইলে।
  4. AsyncSubject: কেবলমাত্র চূড়ান্ত আউটপুট প্রয়োজন হলে।

আপনার যদি আরও বিস্তারিত প্রয়োজন হয়, জানাবেন! 😊

Content added By
Promotion

Are you sure to start over?

Loading...