Java में Event Bus और Observer Pattern
आधुनिक एप्लिकेशन अक्सर इवेंट-ड्रिवन आर्किटेक्चर पर बनाए जाते हैं। Java में इस मॉडल को लागू करने के दो मुख्य टूल हैं — Observer Pattern और इसका विकसित रूप — Event Bus (इवेंट बस)। इस लेख में हम जानेंगे कि ये दोनों कैसे अलग हैं, इन्हें कैसे लागू करें, और कौन सी लाइब्रेरी डेवलपमेंट को आसान बनाती हैं।
Observer Pattern क्या है?
Observer Pattern (प्रेक्षक पैटर्न) एक बिहेवियरल डिज़ाइन पैटर्न है, जिसमें एक ऑब्जेक्ट (सब्जेक्ट) अपनी स्थिति में बदलाव के बारे में कई आश्रित ऑब्जेक्ट्स (ऑब्ज़र्वर्स) को सूचित करता है। Java में यह पैटर्न ग्राफिकल इंटरफेस, लॉगिंग सिस्टम और इवेंट प्रोसेसिंग में अक्सर उपयोग होता है।
मुख्य घटक:
- Subject — इवेंट का स्रोत, ऑब्ज़र्वर्स की सूची प्रबंधित करता है
- Observer — इंटरफ़ेस, जिसे सभी सब्सक्राइबर लागू करते हैं
- ConcreteSubject — सब्जेक्ट का ठोस कार्यान्वयन
- ConcreteObserver — विशिष्ट ऑब्ज़र्वर
शुद्ध Java में कार्यान्वयन का उदाहरण:
// ऑब्ज़र्वर इंटरफ़ेस
interface Observer {
void update(String event);
}
// सब्जेक्ट इंटरफ़ेस
interface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyObservers(String event);
}
// ठोस सब्जेक्ट
class EventManager implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(String event) {
for (Observer observer : observers) {
observer.update(event);
}
}
public void fireEvent(String event) {
System.out.println("इवेंट: " + event);
notifyObservers(event);
}
}
// ठोस ऑब्ज़र्वर
class LogObserver implements Observer {
@Override
public void update(String event) {
System.out.println("लॉग: इवेंट प्राप्त हुआ - " + event);
}
}
// उपयोग
public class ObserverDemo {
public static void main(String[] args) {
EventManager manager = new EventManager();
manager.attach(new LogObserver());
manager.fireEvent("उपयोगकर्ता ने सिस्टम में लॉगिन किया");
}
}
Event Bus क्या है?
Event Bus (इवेंट बस) एक केंद्रीकृत संदेश विनिमय तंत्र है जो एप्लिकेशन के घटकों के बीच संचार को सक्षम बनाता है। क्लासिक Observer के विपरीत, जहां सब्जेक्ट सीधे सब्सक्राइबर को प्रबंधित करता है, Event Bus एक सामान्य बस के माध्यम से भेजने वालों और प्राप्त करने वालों को अलग करता है।
Event Bus के लाभ:
- घटकों के बीच कमजोर संबंध (loose coupling)
- सरलीकृत सब्सक्रिप्शन और प्रकाशन
- प्रकार के अनुसार इवेंट फ़िल्टरिंग का समर्थन
- अतुल्यकालिक प्रसंस्करण (वैकल्पिक)
Guava EventBus लाइब्रेरी
Google Guava Event Bus का एक शक्तिशाली कार्यान्वयन प्रदान करता है। इसका उपयोग औद्योगिक परियोजनाओं में व्यापक रूप से किया जाता है और इसे एकीकृत करना आसान है।
Maven डिपेंडेंसी:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.0.0-jre</version>
</dependency>
उपयोग का उदाहरण:
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
// इवेंट क्लास
class UserLoginEvent {
private final String username;
public UserLoginEvent(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}
// सब्सक्राइबर
class EventListener {
@Subscribe
public void handleUserLogin(