কম্পিউটার টিউটোরিয়াল

জাভা ৯-এ Subscriber ইন্টারফেস ইমপ্লিমেন্ট করা

Reactive Streams এবং Subscriber

Java 9 রিয়েক্টিভ স্ট্রিমস সাপোর্টের জন্য কিছু ইন্টারফেস এবং ক্লাস পরিচিত করে: Publisher, Subscriber, Subscription, এবং SubmissionPublisher ক্লাস (যে Publisher ইমপ্লিমেন্ট করে)। প্রতিটি ইন্টারফেস রিয়েক্টিভ স্ট্রিমসের নীতির অনুযায়ী ভিন্ন ভূমিকা পালন করে।

আমরা Subscriber ইন্টারফেস ব্যবহার করে পাবলিশার দ্বারা প্রকাশিত ডেটা সাবস্ক্রাইব করতে পারি। Subscriber ইন্টারফেস ইমপ্লিমেন্ট করে এর অ্যাবস্ট্র্যাক্ট মেথডগুলো ইমপ্লিমেন্ট করতে হয়।

Flow.Subscriber ইন্টারফেসের মেথডসমূহ

  • onComplete(): পাবলিশার অবজেক্ট তার ভূমিকা পুরা করলে এই মেথড কল হয়।
  • onError(): পাবলিশারে কিছু সমস্যা হলে সাবস্ক্রাইবারকে নোটিফাই করতে এই মেথড কল হয়।
  • onNext(): পাবলিশার নতুন তথ্য সাবস্ক্রাইবারদের নোটিফাই করলে এই মেথড কল হয়।
  • onSubscribe(): পাবলিশার সাবস্ক্রাইবার যোগ করলে এই মেথড কল হয়।

উদাহরণ: Subscriber ইমপ্লিমেন্টেশন

import java.util.concurrent.Flow; 
import java.util.concurrent.SubmissionPublisher; 
import java.util.stream.IntStream; 

public class SubscriberImplTest { 
    public static class Subscriber implements Flow.Subscriber<Integer> { 
        private Flow.Subscription subscription; 
        private boolean isDone; 
        
        @Override 
        public void onSubscribe(Flow.Subscription subscription) { 
            System.out.println("Subscribed"); 
            this.subscription = subscription; 
            this.subscription.request(1); 
        } 
        @Override 
        public void onNext(Integer item) { 
            System.out.println("Processing " + item); 
            this.subscription.request(1); 
        } 
        @Override 
        public void onError(Throwable throwable) { 
            throwable.printStackTrace(); 
        } 
        @Override 
        public void onComplete() { 
            System.out.println("Processing done"); 
            isDone = true; 
        } 
    } 
    public static void main(String args[]) throws InterruptedException { 
        SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>(); 
        Subscriber subscriber = new Subscriber(); 
        publisher.subscribe(subscriber); 
        IntStream intData = IntStream.rangeClosed(1, 10); 
        intData.forEach(publisher::submit); 
        publisher.close(); 
        while(!subscriber.isDone) { 
            Thread.sleep(10); 
        } 
        System.out.println("Done"); 
    } 
}

আউটপুট

Subscribed Processing 1 Processing 2 Processing 3 Processing 4 Processing 5 Processing 6 Processing 7 Processing 8 Processing 9 Processing 10 Processing done Done
  1. জাভাতে এডিটেবল JLabel কীভাবে বাস্তবায়ন করবেন?

  2. জাভাতে JPanel-এর paintComponent() মেথড কীভাবে বাস্তবায়ন করবেন?

  3. জাভাতে BorderFactory ব্যবহার করে ভিন্ন ধরনের বর্ডার কীভাবে বাস্তবায়ন করবেন?

  4. জাভাতে JToggleButton কীভাবে বাস্তবায়ন করবেন?