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");
    }
}