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
2. Observer.java
3. WeatherBroadcast.java
4. NewsPaperAgency.java
5. NewsChannel.java
6. WeatherInfoWebsite.java
7. ObserverDesignPatternTest.java
Output of the program :
Video tutorial to demonstrate how to implement 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.