Observable ক্লাসটি Java.util প্যাকেজের অংশ এবং এটি Observer design pattern অনুসরণ করে। এটি একটি subject হিসেবে কাজ করে যা বিভিন্ন observers কে তাদের অবস্থা পরিবর্তনের বিষয়ে জানিয়ে দেয়। এই ক্লাসটি বিশেষভাবে উপকারী যখন আপনি অ্যাপ্লিকেশনে একাধিক অবজারভারকে একটি ডেটা পরিবর্তনের বিষয়ে অবহিত করতে চান। যদিও Observable ক্লাসটি Java 9 থেকে deprecated (অবসরপ্রাপ্ত) ঘোষণা করা হয়েছে, তবে এটি এখনও অনেক পুরনো অ্যাপ্লিকেশন এবং কোডবেসে ব্যবহৃত হয়।
Observable ক্লাসের মাধ্যমে subject (অবজেক্ট) তার অবস্থা পরিবর্তন হলে সমস্ত observers-কে জানিয়ে দেয়। এটি ইভেন্ট ড্রিভেন প্রোগ্রামিংয়ে ব্যবহৃত হয়, যেখানে observer অবজেক্টটি subject-এর অবস্থা পরিবর্তন সম্পর্কে জানিয়ে রাখা হয়।
Observable ক্লাসের বৈশিষ্ট্য:
- Observable Class:
Observableএকটি abstract class যাsetChanged(),notifyObservers(), এবংclearChanged()মতো মেথড সরবরাহ করে।- এটি Observer pattern বাস্তবায়ন করে, যার মাধ্যমে অবজেক্টের অবস্থা পরিবর্তিত হলে অন্য অবজেক্টগুলোকে জানানো যায়।
- Observer Interface:
Observerএকটি ইন্টারফেস যাupdate()মেথডটি প্রদান করে। যখন observable অবজেক্টের অবস্থা পরিবর্তিত হয়, তখন observer-এরupdate()মেথড কল করা হয়।
Observable ক্লাসের প্রধান মেথডসমূহ:
setChanged():- এটি
Observableঅবজেক্টের changed ফ্ল্যাগ সেট করে। এটিnotifyObservers()এর মাধ্যমে observer-দের অবহিত করার পূর্বে অবশ্যই কল করতে হবে।
- এটি
clearChanged():- এটি
changedফ্ল্যাগটি রিসেট করে, অর্থাৎ ডেটা পরিবর্তনের চিহ্ন মুছে ফেলে।
- এটি
notifyObservers():setChanged()কল করার পর, এই মেথডটি সমস্ত observer-দের অবহিত করে যে subject এর অবস্থা পরিবর্তিত হয়েছে।
addObserver(Observer o):- এটি
Observerঅবজেক্টটি observable অবজেক্টের তালিকায় যুক্ত করে। অর্থাৎ, যখন subject এর অবস্থা পরিবর্তিত হবে, তখন সেই observer কে অবহিত করা হবে।
- এটি
ব্যবহার:
এখানে একটি উদাহরণ দেখানো হচ্ছে যেখানে Observable এবং Observer ব্যবহার করে ডেটার পরিবর্তন observer কে জানানো হচ্ছে।
উদাহরণ: Observable এবং Observer ব্যবহার
import java.util.Observable;
import java.util.Observer;
// Observable ক্লাসের একটি কাস্টম উপবর্গ তৈরি করা
class Temperature extends Observable {
private int temperature;
public void setTemperature(int temperature) {
this.temperature = temperature;
setChanged(); // ডেটা পরিবর্তিত হয়েছে এটি চিহ্নিত করা
notifyObservers(); // observer-দের অবহিত করা
}
public int getTemperature() {
return temperature;
}
}
// Observer ক্লাস তৈরি করা
class TemperatureObserver implements Observer {
private String name;
public TemperatureObserver(String name) {
this.name = name;
}
@Override
public void update(Observable observable, Object arg) {
// observer এ অবস্থা পরিবর্তন হলে কাজ করা
if (observable instanceof Temperature) {
Temperature temp = (Temperature) observable;
System.out.println(name + " received update: Temperature changed to " + temp.getTemperature() + "°C");
}
}
}
public class ObservableExample {
public static void main(String[] args) {
// Observable এবং Observer তৈরি করা
Temperature temperature = new Temperature();
TemperatureObserver observer1 = new TemperatureObserver("Observer 1");
TemperatureObserver observer2 = new TemperatureObserver("Observer 2");
// observer গুলোকে observable এ যুক্ত করা
temperature.addObserver(observer1);
temperature.addObserver(observer2);
// Temperature সেট করা, যা observer-দের অবহিত করবে
temperature.setTemperature(30); // Observer 1 এবং Observer 2 এ এই পরিবর্তনটি আসবে
// Temperature পরিবর্তন হলে observer গুলি আবার অবহিত হবে
temperature.setTemperature(35); // Observer 1 এবং Observer 2 আবার অবহিত হবে
}
}
Output:
Observer 1 received update: Temperature changed to 30°C
Observer 2 received update: Temperature changed to 30°C
Observer 1 received update: Temperature changed to 35°C
Observer 2 received update: Temperature changed to 35°C
ব্যাখ্যা:
- Temperature ক্লাসটি
Observableক্লাস থেকে ইনহেরিট করেছে এবংsetTemperature()মেথডের মাধ্যমে temperature সেট করছে। যখন temperature পরিবর্তিত হয়,setChanged()এবংnotifyObservers()মেথড ব্যবহার করা হচ্ছে যাতে সমস্ত observer অবহিত হয়। - TemperatureObserver ক্লাসটি
Observerইন্টারফেস বাস্তবায়ন করে এবংupdate()মেথডের মাধ্যমে Temperature অবজেক্টের পরিবর্তন সম্পর্কে জানাচ্ছে। - ObservableExample ক্লাসে আমরা Observable এবং Observer এর একযোগ ব্যবহারের উদাহরণ দেখেছি।
Observable এবং Observer ক্লাসের ভবিষ্যত:
যেহেতু Observable ক্লাসটি Java 9 থেকে deprecated হয়েছে, এখন এটি পুরনো পদ্ধতির এক অংশ হয়ে দাঁড়িয়েছে। বর্তমানে java.beans প্যাকেজের PropertyChangeListener বা java.util.concurrent প্যাকেজের অন্যান্য ক্লাসগুলো আধুনিক, সুপারিশকৃত বিকল্প হিসেবে ব্যবহৃত হয়। এছাড়াও, Reactive Programming ভিত্তিক ফ্রেমওয়ার্ক, যেমন RxJava এবং Project Reactor, অনেক আধুনিক অ্যাপ্লিকেশন এবং লাইব্রেরিতে ব্যবহার করা হচ্ছে।
Observable এবং Observer ক্লাস Java-তে Observer design pattern বাস্তবায়ন করার জন্য ব্যবহৃত হয়, যেখানে একটি observable অবজেক্ট তার অবস্থা পরিবর্তন হলে observer অবজেক্টগুলোকে অবহিত করে। যদিও Java 9 থেকে এটি deprecated হয়ে গেছে, তবে এর মাধ্যমে একাধিক অবজেক্টের মধ্যে ইভেন্ট ড্রিভেন যোগাযোগ সম্ভব ছিল। বর্তমানে এর পরিবর্তে Reactive Programming বা আধুনিক ইভেন্ট সিস্টেম ব্যবহার করা হচ্ছে।
Read more