added observer sample
This commit is contained in:
		
							
								
								
									
										18
									
								
								observer/src/main/java/com/iluwatar/App.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								observer/src/main/java/com/iluwatar/App.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
public class App 
 | 
			
		||||
{
 | 
			
		||||
    public static void main( String[] args )
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    	Weather weather = new Weather();
 | 
			
		||||
    	weather.addObserver(new Orcs());
 | 
			
		||||
    	weather.addObserver(new Hobbits());
 | 
			
		||||
    	
 | 
			
		||||
    	weather.timePasses();
 | 
			
		||||
    	weather.timePasses();
 | 
			
		||||
    	weather.timePasses();
 | 
			
		||||
    	weather.timePasses();
 | 
			
		||||
    	
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								observer/src/main/java/com/iluwatar/Hobbits.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								observer/src/main/java/com/iluwatar/Hobbits.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
public class Hobbits implements WeatherObserver {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void update(WeatherType currentWeather) {
 | 
			
		||||
		switch (currentWeather) {
 | 
			
		||||
		case COLD:
 | 
			
		||||
			System.out.println("The hobbits are shivering in the cold weather.");
 | 
			
		||||
			break;
 | 
			
		||||
		case RAINY:
 | 
			
		||||
			System.out.println("The hobbits look for cover from the rain.");
 | 
			
		||||
			break;
 | 
			
		||||
		case SUNNY:
 | 
			
		||||
			System.out.println("The happy hobbits bade in the warm sun.");
 | 
			
		||||
			break;
 | 
			
		||||
		case WINDY:
 | 
			
		||||
			System.out.println("The hobbits hold their hats tightly in the windy weather.");
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								observer/src/main/java/com/iluwatar/Orcs.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								observer/src/main/java/com/iluwatar/Orcs.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
public class Orcs implements WeatherObserver {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void update(WeatherType currentWeather) {
 | 
			
		||||
		switch (currentWeather) {
 | 
			
		||||
		case COLD:
 | 
			
		||||
			System.out.println("The orcs are freezing cold.");
 | 
			
		||||
			break;
 | 
			
		||||
		case RAINY:
 | 
			
		||||
			System.out.println("The orcs are dripping wet.");
 | 
			
		||||
			break;
 | 
			
		||||
		case SUNNY:
 | 
			
		||||
			System.out.println("The sun hurts the orcs' eyes.");
 | 
			
		||||
			break;
 | 
			
		||||
		case WINDY:
 | 
			
		||||
			System.out.println("The orc smell almost vanishes in the wind.");
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								observer/src/main/java/com/iluwatar/Weather.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								observer/src/main/java/com/iluwatar/Weather.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class Weather {
 | 
			
		||||
 | 
			
		||||
	private WeatherType currentWeather;
 | 
			
		||||
	private List<WeatherObserver> observers;
 | 
			
		||||
	
 | 
			
		||||
	public Weather() {
 | 
			
		||||
		observers = new ArrayList<>();
 | 
			
		||||
		currentWeather = WeatherType.SUNNY;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void addObserver(WeatherObserver obs) {
 | 
			
		||||
		observers.add(obs);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void removeObserver(WeatherObserver obs) {
 | 
			
		||||
		observers.remove(obs);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void timePasses() {
 | 
			
		||||
		switch (currentWeather) {
 | 
			
		||||
		case COLD:
 | 
			
		||||
			currentWeather = WeatherType.SUNNY;
 | 
			
		||||
			break;
 | 
			
		||||
		case RAINY:
 | 
			
		||||
			currentWeather = WeatherType.WINDY;
 | 
			
		||||
			break;
 | 
			
		||||
		case SUNNY:
 | 
			
		||||
			currentWeather = WeatherType.RAINY;
 | 
			
		||||
			break;
 | 
			
		||||
		case WINDY:
 | 
			
		||||
			currentWeather = WeatherType.COLD;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		System.out.println("The weather now changes to " + currentWeather);
 | 
			
		||||
		notifyObservers();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void notifyObservers() {
 | 
			
		||||
		for (WeatherObserver obs: observers) {
 | 
			
		||||
			obs.update(currentWeather);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								observer/src/main/java/com/iluwatar/WeatherObserver.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								observer/src/main/java/com/iluwatar/WeatherObserver.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
public interface WeatherObserver {
 | 
			
		||||
 | 
			
		||||
	void update(WeatherType currentWeather);
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								observer/src/main/java/com/iluwatar/WeatherType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								observer/src/main/java/com/iluwatar/WeatherType.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
public enum WeatherType {
 | 
			
		||||
 | 
			
		||||
	SUNNY,
 | 
			
		||||
	RAINY,
 | 
			
		||||
	WINDY,
 | 
			
		||||
	COLD;
 | 
			
		||||
	
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return this.name().toLowerCase();
 | 
			
		||||
	};
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user