Interview question
What is the Observer design pattern and where is it used in Java? Observer design pattern क्या है और Java में कहां इस्तेमाल होता है?
Answer
The Observer pattern defines a one-to-many dependency where multiple 'observer' objects are notified automatically whenever a 'subject' object's state changes - foundational for event-driven systems.
import java.util.*;
// Observer interface - defines the notification contract
interface Observer {
void update(String event);
}
// Subject - maintains a list of observers and notifies them
class NewsPublisher {
private List<Observer> observers = new ArrayList<>();
public void subscribe(Observer observer) {
observers.add(observer);
}
public void unsubscribe(Observer observer) {
observers.remove(observer);
}
public void publishNews(String news) {
for (Observer observer : observers) {
observer.update(news); // notify ALL subscribers
}
}
}
// Concrete observers
class EmailSubscriber implements Observer {
private String email;
public EmailSubscriber(String email) { this.email = email; }
public void update(String event) {
System.out.println('Emailing ' + email + ': ' + event);
}
}
class SmsSubscriber implements Observer {
public void update(String event) {
System.out.println('SMS: ' + event);
}
}
NewsPublisher publisher = new NewsPublisher();
publisher.subscribe(new EmailSubscriber('john@example.com'));
publisher.subscribe(new SmsSubscriber());
publisher.publishNews('Breaking News: Java 21 released!');
// Both subscribers are notified automatically
// Real-world uses of the Observer pattern in Java:
// - Java Swing/AWT event listeners (ActionListener, MouseListener)
// - java.util.Observer/Observable (deprecated since Java 9)
// - Spring's ApplicationEvent and ApplicationListener
// - Reactive programming libraries (RxJava) build heavily on this conceptObserver pattern एक-से-कई dependency define करता है जहां subject object की state बदलने पर कई 'observer' objects automatically notify होते हैं - event-driven systems की foundation है।
import java.util.*;
interface Observer {
void update(String event);
}
class NewsPublisher {
private List<Observer> observers = new ArrayList<>();
public void subscribe(Observer observer) {
observers.add(observer);
}
public void unsubscribe(Observer observer) {
observers.remove(observer);
}
public void publishNews(String news) {
for (Observer observer : observers) {
observer.update(news);
}
}
}
class EmailSubscriber implements Observer {
private String email;
public EmailSubscriber(String email) { this.email = email; }
public void update(String event) {
System.out.println('Emailing ' + email + ': ' + event);
}
}
class SmsSubscriber implements Observer {
public void update(String event) {
System.out.println('SMS: ' + event);
}
}
NewsPublisher publisher = new NewsPublisher();
publisher.subscribe(new EmailSubscriber('john@example.com'));
publisher.subscribe(new SmsSubscriber());
publisher.publishNews('Breaking News: Java 21 released!');
// Real-world उपयोग: Swing event listeners, Spring ApplicationEvent, RxJavaWas this answer clear?