Java Technologies Observer Interface এর মাধ্যমে Notification Management গাইড ও নোট

230

Observer ইন্টারফেসটি java.util প্যাকেজের একটি পুরনো অংশ, যা observer design pattern-এর জন্য ব্যবহৃত হয়। এটি publish-subscribe মডেলকে বাস্তবায়িত করতে সাহায্য করে, যেখানে একটি অবজেক্ট subject বা observable অন্য একটি অবজেক্ট observer বা subscriber-কে তার অবস্থা পরিবর্তনের বিষয়ে অবহিত (notify) করে।

Observer Design Pattern

Observer Design Pattern হল একটি behavioural design pattern, যা নির্দিষ্ট একটি অবজেক্টের (subject) অবস্থা পরিবর্তিত হলে অন্য এক বা একাধিক অবজেক্ট (observers) কে অবহিত (notify) করে। এটি মূলত loosely coupled কম্পোনেন্টগুলির মধ্যে যোগাযোগ স্থাপন করতে ব্যবহৃত হয়।

Observer Interface:

Observer ইন্টারফেসটি update() মেথড ঘোষণা করে, যা Subject এর অবস্থা পরিবর্তন হলে Observer-কে অবহিত করার জন্য ব্যবহৃত হয়।

Observer Interface-এর মেথড:

  • update(Observable o, Object arg): এই মেথডটি Subject (অথবা Observable) এর অবস্থা পরিবর্তিত হলে কল হয়। এখানে o হল সেই অবজেক্ট (subject) যা পরিবর্তিত হয়েছে, এবং arg হচ্ছে সেই পরিবর্তনের সাথে সম্পর্কিত কোনো অতিরিক্ত তথ্য।

Subject (Observable) Interface:

Observable ইন্টারফেসটি একটি অবজেক্টকে তার observers কে অবহিত করতে সক্ষম করে। এটি addObserver(), deleteObserver(), setChanged(), এবং notifyObservers() মেথডগুলির মাধ্যমে observers এর সাথে যোগাযোগ স্থাপন করতে ব্যবহৃত হয়।

Observable Interface-এর মেথড:

  • addObserver(Observer o): একটি observer অবজেক্ট তালিকায় যুক্ত করে।
  • deleteObserver(Observer o): একটি observer অবজেক্ট তালিকা থেকে সরিয়ে ফেলে।
  • setChanged(): অবজেক্টের পরিবর্তন হয়েছে তা নির্দেশ করে।
  • notifyObservers(): সমস্ত অবজার্ভারকে অবহিত (notify) করে যে অবজেক্টের অবস্থার পরিবর্তন হয়েছে।

Observer Interface এর মাধ্যমে Notification Management - উদাহরণ:

ধরা যাক, একটি WeatherStation অবজেক্ট (Subject) আছে, যা তার temperature পরিবর্তিত হলে বিভিন্ন Observer (যেমন Display বা Logger) কে অবহিত করবে।

প্রোগ্রাম উদাহরণ:

import java.util.Observable;
import java.util.Observer;

// Subject (Observable) class
class WeatherStation extends Observable {
    private float temperature;

    public void setTemperature(float temperature) {
        this.temperature = temperature;
        setChanged();  // Mark as changed
        notifyObservers();  // Notify all observers
    }

    public float getTemperature() {
        return temperature;
    }
}

// Observer class - Display
class Display implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        if (o instanceof WeatherStation) {
            WeatherStation weatherStation = (WeatherStation) o;
            System.out.println("Display updated with temperature: " + weatherStation.getTemperature() + "°C");
        }
    }
}

// Observer class - Logger
class Logger implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        if (o instanceof WeatherStation) {
            WeatherStation weatherStation = (WeatherStation) o;
            System.out.println("Logger - Temperature recorded: " + weatherStation.getTemperature() + "°C");
        }
    }
}

public class ObserverExample {
    public static void main(String[] args) {
        // Create subject (WeatherStation)
        WeatherStation weatherStation = new WeatherStation();

        // Create observers (Display and Logger)
        Display display = new Display();
        Logger logger = new Logger();

        // Add observers to subject
        weatherStation.addObserver(display);
        weatherStation.addObserver(logger);

        // Change the temperature and notify observers
        weatherStation.setTemperature(25.0f);
        weatherStation.setTemperature(30.5f);
    }
}

Output:

Display updated with temperature: 25.0°C
Logger - Temperature recorded: 25.0°C
Display updated with temperature: 30.5°C
Logger - Temperature recorded: 30.5°C

ব্যাখ্যা:

  1. WeatherStation (Subject) তার temperature পরিবর্তন করে, এবং setChanged() এবং notifyObservers() মেথড ব্যবহার করে observers-কে অবহিত (notify) করে।
  2. Display এবং Logger ক্লাস দুটি Observer ইন্টারফেস ইমপ্লিমেন্ট করেছে এবং update() মেথডে তাদের প্রতিক্রিয়া দেখাচ্ছে যখন temperature পরিবর্তিত হচ্ছে।
  3. প্রথমে 25.0°C এবং পরে 30.5°C তাপমাত্রার পরিবর্তন হলে, Display এবং Logger উভয়ই তাদের সংশ্লিষ্ট বার্তা প্রিন্ট করেছে।

Observer Interface এবং Notification Management - উপকারিতা:

  1. Loose Coupling:
    • Observer design pattern এর মাধ্যমে Subject এবং Observer এর মধ্যে কম সংযোগ থাকে। Subject তার অবস্থা পরিবর্তন করলে, Observer কে অবহিত করে, কিন্তু Observer এর কোনো প্রয়োজন নেই Subject কে জানার বা প্রতিক্রিয়া জানার জন্য।
  2. Multiple Observers:
    • একাধিক Observer একযোগভাবে একে অপরের অবস্থার পরিবর্তন দেখতে বা প্রক্রিয়াকরণ করতে পারে, যেমন একটি Display এর পাশাপাশি Logger অবজার্ভার থাকতে পারে।
  3. Dynamic Updates:
    • যেকোনো সময় Subject তার অবস্থা পরিবর্তন করলে, সমস্ত Observer অবহিত হবে এবং তারা স্বয়ংক্রিয়ভাবে নিজেদের তথ্য আপডেট করবে, যা রিয়েল-টাইম অ্যাপ্লিকেশনগুলির জন্য খুবই কার্যকরী।
  4. Flexibility:
    • একটি Subject এ নতুন Observer যোগ করা বা পুরোনো Observer বাদ দেওয়া সহজ। কোনভাবেই একে অপরের ওপর নির্ভরশীল নয়।

Observer Interface এবং Observer Design Pattern Java-তে কার্যকরী notification management এর জন্য ব্যবহৃত হয়। এটি একটি শক্তিশালী ডিজাইন প্যাটার্ন যা বিভিন্ন কম্পোনেন্টগুলির মধ্যে যোগাযোগ স্থাপন করে, যেখানে subject তার অবস্থা পরিবর্তিত হলে এক বা একাধিক observer অবহিত হয়। এই প্যাটার্নটি ডেটা ফ্লো এবং ইভেন্ট ড্রিভেন আর্কিটেকচার (যেমন, GUI অ্যাপ্লিকেশন, সিস্টেম মনিটরিং, ইত্যাদি) তৈরি করতে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...