Subject কি এবং কিভাবে কাজ করে?

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

309

Subject হলো RxJava এর একটি বিশেষ উপাদান, যা Observable এবং Observer উভয়ের মতো আচরণ করে। এটি একদিকে ডেটা স্ট্রিম গ্রহণ করতে পারে (যেমন একটি Observer), আবার অন্যদিকে সেই ডেটা স্ট্রিমকে একাধিক সাবস্ক্রাইবারের মধ্যে বিতরণ করতে পারে (যেমন একটি Observable)।

Subject কেন প্রয়োজন?

  1. Multicasting Support:
    সাধারণত, একটি Observable ডেটা একাধিক Observer এর মধ্যে শেয়ার করতে পারে না। কিন্তু Subject ব্যবহার করে আপনি একই ডেটা স্ট্রিম একাধিক Observer এর মধ্যে শেয়ার করতে পারবেন।
  2. Hot Observable Creation:
    Subject হলো hot observable, যা অর্থ, এটি ডেটা প্রেরণ শুরু করার পর সাবস্ক্রাইবার যুক্ত হলেও শুধুমাত্র বর্তমান ডেটা স্ট্রিম পায়।
  3. Bidirectional Communication:
    Subject ডেটা প্রেরণ এবং গ্রহণ উভয় কাজ করতে পারে, যা bidirectional communication এর জন্য উপযুক্ত।

RxJava Subject এর ধরণ

RxJava এ বিভিন্ন প্রকারের Subject রয়েছে। প্রতিটির নির্দিষ্ট আচরণ ও ব্যবহারের ক্ষেত্রে রয়েছে।

১. PublishSubject

  • এটি ডেটা স্ট্রিমের শুধুমাত্র বর্তমান এবং পরবর্তী আইটেমগুলোর তথ্য প্রদান করে।
  • যখন নতুন Observer যুক্ত হয়, এটি শুধুমাত্র নতুন ডেটা পায়।

কোড উদাহরণ:

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("Hello");
        subject.onNext("RxJava");

        subject.subscribe(item -> System.out.println("Observer 2: " + item)); // নতুন Observer
        subject.onNext("World");
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: World

২. BehaviorSubject

  • এটি সর্বশেষ onNext() আইটেম এবং তার পরবর্তী সব আইটেম সরবরাহ করে।
  • নতুন Observer সর্বশেষ আইটেম পায় এবং তারপর ডেটা স্ট্রিম অনুসরণ করে।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.BehaviorSubject;

public class BehaviorSubjectExample {
    public static void main(String[] args) {
        BehaviorSubject<String> subject = BehaviorSubject.create();

        subject.onNext("Hello");
        subject.subscribe(item -> System.out.println("Observer 1: " + item)); // সর্বশেষ আইটেম পায়
        subject.onNext("RxJava");
        subject.onNext("World");

        subject.subscribe(item -> System.out.println("Observer 2: " + item)); // সর্বশেষ আইটেম পায়
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: World

৩. ReplaySubject

  • এটি পুরো ডেটা স্ট্রিমকে সংরক্ষণ করে এবং নতুন Observer এ যোগ দেওয়ার পরে সমস্ত পূর্ববর্তী আইটেম সরবরাহ করে।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.ReplaySubject;

public class ReplaySubjectExample {
    public static void main(String[] args) {
        ReplaySubject<String> subject = ReplaySubject.create();

        subject.onNext("Hello");
        subject.onNext("RxJava");

        subject.subscribe(item -> System.out.println("Observer 1: " + item));
        subject.onNext("World");

        subject.subscribe(item -> System.out.println("Observer 2: " + item)); // সমস্ত আইটেম পায়
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: Hello
Observer 2: RxJava
Observer 2: World

৪. AsyncSubject

  • এটি ডেটা স্ট্রিমের শুধুমাত্র সর্বশেষ আইটেম প্রদান করে, যখন স্ট্রিম সম্পূর্ণ হয়।
  • onComplete() কল হওয়ার পর এটি ডেটা প্রদান করে।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.AsyncSubject;

public class AsyncSubjectExample {
    public static void main(String[] args) {
        AsyncSubject<String> subject = AsyncSubject.create();

        subject.onNext("Hello");
        subject.onNext("RxJava");
        subject.onNext("World");

        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onComplete(); // শেষ ডেটা প্রদান করা হয়
    }
}

আউটপুট:

Observer 1: World

৫. UnicastSubject

  • এটি একমাত্র একটি Observer এর জন্য কাজ করে। যদি একাধিক Observer যুক্ত করা হয়, এটি ত্রুটি ছোড়ে।

Subject এর কার্যপ্রণালী

  1. Observer হিসাবে কাজ করা:
    • Subject এর মাধ্যমে ডেটা গ্রহণ করা যায়।
    • এটি onNext(), onError(), এবং onComplete() মেথডের মাধ্যমে ডেটা হ্যান্ডেল করে।
  2. Observable হিসাবে কাজ করা:
    • ডেটা স্ট্রিমকে একাধিক Observer এর মধ্যে বিতরণ করে।
    • subscribe() মেথড ব্যবহার করে Observer যুক্ত করা হয়।

Subject এর ব্যবহার ক্ষেত্র

  1. Multicasting Events:
    • একাধিক ক্লায়েন্ট বা Observer কে একই ইভেন্ট পাঠাতে।
  2. Hot Streams:
    • ডেটা স্ট্রিম প্রক্রিয়া যেখানে স্ট্রিমের ডেটা সর্বদা পরিবর্তনশীল।
  3. Manual Data Emission:
    • onNext() ব্যবহার করে ম্যানুয়ালি ডেটা ইমিট করতে।

সংক্ষেপে

RxJava এর Subject হলো একটি শক্তিশালী টুল, যা Observable এবং Observer উভয়ের মতো আচরণ করে। এটি ডেটা স্ট্রিম শেয়ার করতে, ম্যানুয়ালি ডেটা প্রেরণ করতে, এবং একাধিক সাবস্ক্রাইবারের সাথে যোগাযোগ বজায় রাখতে অপরিহার্য। বিভিন্ন ধরণের Subject এর ব্যবহার নির্ভর করে নির্দিষ্ট সমস্যা সমাধানের উপর।

Content added By
Promotion

Are you sure to start over?

Loading...