What is Observer Design Pattern in Java ?.
The Gang of Four book (Design Patterns: Elements of Reusable Object-Oriented Software, 1995, Pearson Education, Inc. Publishing as Pearson Addison Wesley) says that the Observer design pattern should 
"Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically."
Example : Let's say there is Weather Broadcasting company which broadcast weather changes to its subscribers. The subscribers or observers such as News Channels , News Paper Agencies and Weather Information Provider websites etc ... gets updated as soon as weather changes by the Weather Broadcasting company. Let's see how we can implement this Subject - Observer model in Java.
Program to demonstrate how to implement Observer Design Pattern in Java. 
1. Subject.java
package com.hubberspot.designpattern.behavioral.observer;
public interface Subject {
    
    public void addObserver(Observer observer);
    
    public void removeObserver(Observer observer);
    
    public void notifyObservers();
}
2. Observer.java
package com.hubberspot.designpattern.behavioral.observer;
public interface Observer {
    
    public void update(int temperature);
}
3. WeatherBroadcast.java
package com.hubberspot.designpattern.behavioral.observer;
import java.util.ArrayList;
import java.util.List;
public class WeatherBroadcast implements Subject {
    private List< Observer > listOfObservers;
    private int temperature;    
    
    public WeatherBroadcast() {
        listOfObservers = new ArrayList< Observer >();
    }
    
    @Override
    public void addObserver(Observer observer) {
        
        listOfObservers.add(observer);
        
    }
    @Override
    public void removeObserver(Observer observer) {
        
        listOfObservers.remove(observer);        
        
    }
    @Override
    public void notifyObservers() {
        
        for(Observer observer : listOfObservers) {
            observer.update(temperature);
        }
        
    }
    
    public void temperatureChanged(int newTemperature) { 
        temperature = newTemperature;
        notifyObservers();
    }
}
4. NewsPaperAgency.java
package com.hubberspot.designpattern.behavioral.observer;
public class NewsPaperAgency implements Observer {
    @Override
    public void update(int temperature) {
        System.out.println("News Paper Agencies gets current temperature as: "
                + temperature + " degrees");
    }
}
5. NewsChannel.java
package com.hubberspot.designpattern.behavioral.observer;
public class NewsChannel implements Observer {
    @Override
    public void update(int temperature) {
        System.out.println("News Channel gets current temperature as: "
                + temperature + " degrees");
    }
}
6. WeatherInfoWebsite.java
package com.hubberspot.designpattern.behavioral.observer;
public class WeatherInfoWebsite implements Observer {
    @Override
    public void update(int temperature) {
        System.out.println("Weather Info Websites gets current temperature as: "
                + temperature + " degrees");
    }
}
7. ObserverDesignPatternTest.java
package com.hubberspot.designpattern.behavioral.observer;
public class ObserverDesignPatternTest {
    public static void main(String[] args) throws InterruptedException {
        WeatherBroadcast weatherBroadcast = new WeatherBroadcast();
        Observer newsPaperAgency = new NewsPaperAgency();
        Observer newsChannel = new NewsChannel();
        Observer weatherInfoWebsite = new WeatherInfoWebsite();
        weatherBroadcast.addObserver(newsPaperAgency);
        weatherBroadcast.addObserver(newsChannel);
        weatherBroadcast.addObserver(weatherInfoWebsite);
        
        weatherBroadcast.temperatureChanged(30);
        
        System.out.println("\nAfter 2 minutes temperature changes to 33 degrees...\n");
        
        Thread.sleep(120000);
        
        weatherBroadcast.temperatureChanged(33);
    }
}
Output of the program : 
  
Video tutorial to demonstrate how to implement Observer Design Pattern in Java.