import java.util.ArrayList;
import java.util.List;

interface Observer {
    void update(String news);
}

class NewsChannel implements Observer {
    private String name;

    NewsChannel(String name) { this.name = name; }

    public void update(String news) {
        System.out.println(name
            + " received: " + news);
    }
}

class NewsAgency {
    private List<Observer> observers = new ArrayList<>();
    private String news;

    void addObserver(Observer observer) {
        observers.add(observer);
    }

    void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    void setNews(String news) {
        this.news = news;
        for (Observer observer : observers) {
            observer.update(news);
        }
    }
}

public static void main(String[] args) {
    NewsAgency agency = new NewsAgency();

    NewsChannel cnbc = new NewsChannel("CNBC");
    NewsChannel bbc = new NewsChannel("BBC");

    agency.addObserver(cnbc);
    agency.addObserver(bbc);

    agency.setNews("Breaking News!");
}
Back to Design Patterns
Behavioral Design Pattern

Observer

The Observer pattern defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. It is commonly used in event-driven systems, such as GUI frameworks, notification services, and real-time data feeds, where multiple components need to stay in sync with a shared state.