#107 Improve JavaDoc for Observer example
This commit is contained in:
		@@ -1,38 +1,41 @@
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.generic.GHobbits;
 | 
			
		||||
import com.iluwatar.observer.generic.GOrcs;
 | 
			
		||||
import com.iluwatar.observer.generic.GWeather;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Observer pattern defines one-to-many relationship between objects. The target
 | 
			
		||||
 * object sends change notifications to its registered observers.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
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();
 | 
			
		||||
 | 
			
		||||
		// Generic observer inspired by Java Generics and Collection by Naftalin & Wadler
 | 
			
		||||
		System.out.println("\n--Running generic version--");
 | 
			
		||||
		GWeather gWeather = new GWeather();
 | 
			
		||||
		gWeather.addObserver(new GOrcs());
 | 
			
		||||
		gWeather.addObserver(new GHobbits());
 | 
			
		||||
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.generic.GHobbits;
 | 
			
		||||
import com.iluwatar.observer.generic.GOrcs;
 | 
			
		||||
import com.iluwatar.observer.generic.GWeather;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Observer pattern defines one-to-many relationship between objects. The target
 | 
			
		||||
 * object sends change notifications to its registered observers.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public class App {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Program entry point
 | 
			
		||||
	 * @param args command line args
 | 
			
		||||
	 */
 | 
			
		||||
	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();
 | 
			
		||||
 | 
			
		||||
		// Generic observer inspired by Java Generics and Collection by Naftalin & Wadler
 | 
			
		||||
		System.out.println("\n--Running generic version--");
 | 
			
		||||
		GWeather gWeather = new GWeather();
 | 
			
		||||
		gWeather.addObserver(new GOrcs());
 | 
			
		||||
		gWeather.addObserver(new GHobbits());
 | 
			
		||||
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
		gWeather.timePasses();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,30 @@
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Hobbits
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,30 @@
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Orcs
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,42 +1,42 @@
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Weather can be observed by implementing WeatherObserver interface and
 | 
			
		||||
 * registering as listener.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
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() {
 | 
			
		||||
		WeatherType[] enumValues = WeatherType.values();
 | 
			
		||||
		currentWeather = enumValues[(currentWeather.ordinal() + 1) % enumValues.length];
 | 
			
		||||
		System.out.println("The weather changed to " + currentWeather + ".");
 | 
			
		||||
		notifyObservers();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void notifyObservers() {
 | 
			
		||||
		for (WeatherObserver obs : observers) {
 | 
			
		||||
			obs.update(currentWeather);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Weather can be observed by implementing {@link WeatherObserver} interface and
 | 
			
		||||
 * registering as listener.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
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() {
 | 
			
		||||
		WeatherType[] enumValues = WeatherType.values();
 | 
			
		||||
		currentWeather = enumValues[(currentWeather.ordinal() + 1) % enumValues.length];
 | 
			
		||||
		System.out.println("The weather changed to " + currentWeather + ".");
 | 
			
		||||
		notifyObservers();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void notifyObservers() {
 | 
			
		||||
		for (WeatherObserver obs : observers) {
 | 
			
		||||
			obs.update(currentWeather);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,17 @@
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
public enum WeatherType {
 | 
			
		||||
 | 
			
		||||
	SUNNY, RAINY, WINDY, COLD;
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return this.name().toLowerCase();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * WeatherType enumeration
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public enum WeatherType {
 | 
			
		||||
 | 
			
		||||
	SUNNY, RAINY, WINDY, COLD;
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return this.name().toLowerCase();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,11 @@ package com.iluwatar.observer.generic;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.WeatherType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * GHobbits
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class GHobbits implements Race {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void update(GWeather weather, WeatherType weatherType) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,13 @@ package com.iluwatar.observer.generic;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.WeatherType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * GOrcs
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class GOrcs implements Race {
 | 
			
		||||
	
 | 
			
		||||
    @Override
 | 
			
		||||
    public void update(GWeather weather, WeatherType weatherType) {
 | 
			
		||||
        switch (weatherType) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,11 @@ package com.iluwatar.observer.generic;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.WeatherType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * GWeather
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class GWeather extends Observable<GWeather, Race, WeatherType> {
 | 
			
		||||
 | 
			
		||||
    private WeatherType currentWeather;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,13 @@
 | 
			
		||||
package com.iluwatar.observer.generic;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Observer
 | 
			
		||||
 *
 | 
			
		||||
 * @param <S>
 | 
			
		||||
 * @param <O>
 | 
			
		||||
 * @param <A>
 | 
			
		||||
 */
 | 
			
		||||
public interface Observer<S extends Observable<S, O, A>, O extends Observer<S, O, A>, A> {
 | 
			
		||||
 | 
			
		||||
    void update(S subject, A argument);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,5 +2,10 @@ package com.iluwatar.observer.generic;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.WeatherType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Race
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public interface Race extends Observer<GWeather, Race, WeatherType> {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,19 @@
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.App;
 | 
			
		||||
 | 
			
		||||
public class AppTest {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void test() {
 | 
			
		||||
		String[] args = {};
 | 
			
		||||
		App.main(args);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.observer;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.observer.App;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Application test
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class AppTest {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void test() {
 | 
			
		||||
		String[] args = {};
 | 
			
		||||
		App.main(args);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user