From b3d48cc4dfa07c33ae2235ac2a701e2bded62fa4 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Fri, 22 Aug 2014 21:57:54 +0300 Subject: [PATCH] added observer sample --- observer/pom.xml | 23 +++++++++ observer/src/main/java/com/iluwatar/App.java | 18 +++++++ .../src/main/java/com/iluwatar/Hobbits.java | 25 ++++++++++ observer/src/main/java/com/iluwatar/Orcs.java | 25 ++++++++++ .../src/main/java/com/iluwatar/Weather.java | 50 +++++++++++++++++++ .../java/com/iluwatar/WeatherObserver.java | 7 +++ .../main/java/com/iluwatar/WeatherType.java | 14 ++++++ pom.xml | 1 + 8 files changed, 163 insertions(+) create mode 100644 observer/pom.xml create mode 100644 observer/src/main/java/com/iluwatar/App.java create mode 100644 observer/src/main/java/com/iluwatar/Hobbits.java create mode 100644 observer/src/main/java/com/iluwatar/Orcs.java create mode 100644 observer/src/main/java/com/iluwatar/Weather.java create mode 100644 observer/src/main/java/com/iluwatar/WeatherObserver.java create mode 100644 observer/src/main/java/com/iluwatar/WeatherType.java diff --git a/observer/pom.xml b/observer/pom.xml new file mode 100644 index 000000000..00099809a --- /dev/null +++ b/observer/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + observer + 1.0-SNAPSHOT + observer + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/observer/src/main/java/com/iluwatar/App.java b/observer/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..9f59473d5 --- /dev/null +++ b/observer/src/main/java/com/iluwatar/App.java @@ -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(); + + } +} diff --git a/observer/src/main/java/com/iluwatar/Hobbits.java b/observer/src/main/java/com/iluwatar/Hobbits.java new file mode 100644 index 000000000..b4b09ab3c --- /dev/null +++ b/observer/src/main/java/com/iluwatar/Hobbits.java @@ -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; + } + } + +} diff --git a/observer/src/main/java/com/iluwatar/Orcs.java b/observer/src/main/java/com/iluwatar/Orcs.java new file mode 100644 index 000000000..05fc0a4c9 --- /dev/null +++ b/observer/src/main/java/com/iluwatar/Orcs.java @@ -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; + } + } + +} diff --git a/observer/src/main/java/com/iluwatar/Weather.java b/observer/src/main/java/com/iluwatar/Weather.java new file mode 100644 index 000000000..cc43fa6c7 --- /dev/null +++ b/observer/src/main/java/com/iluwatar/Weather.java @@ -0,0 +1,50 @@ +package com.iluwatar; + +import java.util.ArrayList; +import java.util.List; + +public class Weather { + + private WeatherType currentWeather; + private List 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); + } + } +} diff --git a/observer/src/main/java/com/iluwatar/WeatherObserver.java b/observer/src/main/java/com/iluwatar/WeatherObserver.java new file mode 100644 index 000000000..ac4e1c8a5 --- /dev/null +++ b/observer/src/main/java/com/iluwatar/WeatherObserver.java @@ -0,0 +1,7 @@ +package com.iluwatar; + +public interface WeatherObserver { + + void update(WeatherType currentWeather); + +} diff --git a/observer/src/main/java/com/iluwatar/WeatherType.java b/observer/src/main/java/com/iluwatar/WeatherType.java new file mode 100644 index 000000000..9625fbab8 --- /dev/null +++ b/observer/src/main/java/com/iluwatar/WeatherType.java @@ -0,0 +1,14 @@ +package com.iluwatar; + +public enum WeatherType { + + SUNNY, + RAINY, + WINDY, + COLD; + + public String toString() { + return this.name().toLowerCase(); + }; + +} diff --git a/pom.xml b/pom.xml index 50debda49..f42bd9b06 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ iterator mediator memento + observer