java.util.Observable is a class in Java used to implement the Observer design pattern.
It allows an object (observable) to maintain a list of dependents (observers) that are automatically notified of any changes in its state.
Note: Observable is marked deprecated since Java 9 in favor of more flexible and customizable solutions like java.beans or third-party libraries like RxJava.
Commonly Used Constructors and Methods


Simple Program – Observable and Observer
import java.util.Observable;
import java.util.Observer;
class NewsAgency extends Observable {
void setNews(String news) {
setChanged();
notifyObservers(news);
}
}
class Subscriber implements Observer {
private String name;
public Subscriber(String name) {
this.name = name;
}
public void update(Observable o, Object arg) {
System.out.println(name + " received update: " + arg);
}
}
public class SimpleObservableDemo {
public static void main(String[] args) {
NewsAgency agency = new NewsAgency();
Subscriber s1 = new Subscriber("Paani");
Subscriber s2 = new Subscriber("Mahesh");
agency.addObserver(s1);
agency.addObserver(s2);
agency.setNews("Java 21 Released!");
}
}Paani received update: Java 21 Released!
Mahesh received update: Java 21 Released!
Problem Statement:
LotusJavaPrince builds a banking alert system.Mahesh subscribes to notifications like Balance Alerts, Deposit Alerts, and Loan Updates.Every time a banking event occurs, all subscribed observers should be notified automatically.
import java.util.Observable;
import java.util.Observer;
// Observable class
class BankNotificationCenter extends Observable {
void sendAlert(String alert) {
setChanged();
notifyObservers(alert);
}
}
// Observer classes
class BalanceObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("Balance Alert → " + arg);
}
}
class DepositObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("Deposit Alert → " + arg);
}
}
class LoanObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("Loan Alert → " + arg);
}
}
public class BankAlertSystem {
public static void main(String[] args) {
// Observable instance
BankNotificationCenter center = new BankNotificationCenter();
// Observers
BalanceObserver balance = new BalanceObserver();
DepositObserver deposit = new DepositObserver();
LoanObserver loan = new LoanObserver();
// Register observers
center.addObserver(balance);
center.addObserver(deposit);
center.addObserver(loan);
// Trigger events
center.sendAlert("Mahesh's balance dropped below ₹500.");
center.sendAlert("LotusJavaPrince received a deposit of ₹10,000.");
center.sendAlert("Loan EMI due for Mahesh.");
}
}
Observable simplifies the publish-subscribe model.Observers are automatically notified when the state changes.Enables loose coupling between subject and observers.Suitable for event-driven applications (e.g., alerting, GUI, messaging).
Though useful, Observable is deprecated in modern Java because:
- It’s a class (not an interface), so it’s inflexible.
- Doesn’t support lambda expressions.
- Modern alternatives include JavaFX Observable,Java Flow API (Reactive Streams),RxJava / Project Reactor
- Â
