package JDK;

import java.util.Observable;
import java.util.Observer;

public class JDKObserver {

    public static void main(String[] args) {
  WeatherData weatherData = new WeatherData();
  CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
  
  weatherData.setMeasurements(80, 90);
    }

}

class WeatherData extends Observable{
    private float temperature;
    private float humidity;
  
    public WeatherData(){
  
    }
  
    public float gettemperature(){
  return temperature;
    }
  
    public float gethumidity() {
  return humidity;
    }
  
    public void setMeasurements(float t,float h){
  this.temperature = t;
  this.humidity = h;
  measurementsChanged();
    }
  
    public void measurementsChanged(){
  setChanged();
  notifyObservers();
    }
}

interface DisplayElement{
    void display();
}

class CurrentConditionsDisplay implements Observer,DisplayElement{
    private Observable observable;
    private float temperature;
    private float humidity;
  
    public CurrentConditionsDisplay(Observable observable){
  this.observable= observable;
  observable.addObserver(this);
    }
  
    public void update(Observable o, Object arg){
  if (o instanceof WeatherData) {
      WeatherData weatherData = (WeatherData) o;
      temperature = weatherData.gettemperature();
      humidity = weatherData.gethumidity();
      display();
  }
    }
  
    public void display(){
  System.out.println("Current conditions: "
    + temperature + "F degrees and "  
    + humidity + "% humidity");
    }
}