Observer Design Pattern
Key Components of the Observer Pattern
Example Use Case: Weather Station
Implementation in Java (Spring Boot)
public interface Observer { void update(float temperature, float humidity, float pressure); }public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(); }import java.util.ArrayList; import java.util.List; public class WeatherStation implements Subject { private List<Observer> observers; private float temperature; private float humidity; private float pressure; public WeatherStation() { observers = new ArrayList<>(); } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer observer : observers) { observer.update(temperature, humidity, pressure); } } public void setWeatherData(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; notifyObservers(); // Notify all observers of the change } }// TemperatureDisplay.java public class TemperatureDisplay implements Observer { @Override public void update(float temperature, float humidity, float pressure) { System.out.println("Temperature Display: " + temperature + "°C"); } } // HumidityDisplay.java public class HumidityDisplay implements Observer { @Override public void update(float temperature, float humidity, float pressure) { System.out.println("Humidity Display: " + humidity + "%"); } } // PressureDisplay.java public class PressureDisplay implements Observer { @Override public void update(float temperature, float humidity, float pressure) { System.out.println("Pressure Display: " + pressure + " Pa"); } }public class WeatherStationApp { public static void main(String[] args) { WeatherStation weatherStation = new WeatherStation(); // Create and register observers TemperatureDisplay tempDisplay = new TemperatureDisplay(); HumidityDisplay humidityDisplay = new HumidityDisplay(); PressureDisplay pressureDisplay = new PressureDisplay(); weatherStation.registerObserver(tempDisplay); weatherStation.registerObserver(humidityDisplay); weatherStation.registerObserver(pressureDisplay); // Simulate weather data updates weatherStation.setWeatherData(25.0f, 60.0f, 1013.0f); weatherStation.setWeatherData(28.0f, 55.0f, 1010.0f); } }
Explanation
Advantages of the Observer Pattern
Real-World Analogy
Last updated