public enum WeatherType {
SUNNY, RAINY, WINDY, COLD;
@Override public String toString() { return this.name().toLowerCase(); } }
public interface WeatherObserver {
void update(WeatherType currentWeather);
}
public class Orcs implements WeatherObserver {
private static final Logger LOGGER = LoggerFactory.getLogger(Orcs.class);
@Override public void update(WeatherType currentWeather) { switch (currentWeather) { case COLD: LOGGER.info("The orcs are freezing cold."); break; case RAINY: LOGGER.info("The orcs are dripping wet."); break; case SUNNY: LOGGER.info("The sun hurts the orcs' eyes."); break; case WINDY: LOGGER.info("The orc smell almost vanishes in the wind."); break; default: break; } } }
public class Hobbits implements WeatherObserver {
private static final Logger LOGGER = LoggerFactory.getLogger(Hobbits.class);
@Override public void update(WeatherType currentWeather) { switch (currentWeather) { case COLD: LOGGER.info("The hobbits are shivering in the cold weather."); break; case RAINY: LOGGER.info("The hobbits look for cover from the rain."); break; case SUNNY: LOGGER.info("The happy hobbits bade in the warm sun."); break; case WINDY: LOGGER.info("The hobbits hold their hats tightly in the windy weather."); break; default: break; } } }
public class Weather {
private static final Logger LOGGER = LoggerFactory.getLogger(Weather.class);
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]; LOGGER.info("The weather changed to {}.", currentWeather); notifyObservers(); }
private void notifyObservers() { for (WeatherObserver obs : observers) { obs.update(currentWeather); } } }
public class App {
private static final Logger LOGGER = LoggerFactory.getLogger(App.class);
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();
LOGGER.info("--Running generic version--"); GWeather genericWeather = new GWeather(); genericWeather.addObserver(new GOrcs()); genericWeather.addObserver(new GHobbits());
genericWeather.timePasses(); genericWeather.timePasses(); genericWeather.timePasses(); genericWeather.timePasses(); } }
|