Merge pull request #1475 from ravening/simplify_observer

Use enums instead os switch blocks
This commit is contained in:
Ilkka Seppälä 2020-08-05 17:59:52 +03:00 committed by GitHub
commit 0ead283f55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 56 additions and 130 deletions

View File

@ -46,22 +46,7 @@ public class Orcs implements WeatherObserver {
@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;
}
LOGGER.info("The hobbits are facing " + currentWeather.getDescription() + " weather now");
}
}
@ -72,21 +57,7 @@ public class Hobbits implements WeatherObserver {
@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;
}
LOGGER.info("The hobbits are facing " + currentWeather.getDescription() + " weather now");
}
}
```
@ -141,20 +112,20 @@ Here's the full example in action.
weather.timePasses();
// The weather changed to rainy.
// The orcs are dripping wet.
// The hobbits look for cover from the rain.
// The orcs are facing rainy weather now
// The hobbits are facing rainy weather now
weather.timePasses();
// The weather changed to windy.
// The orc smell almost vanishes in the wind.
// The hobbits hold their hats tightly in the windy weather.
// The orcs are facing windy weather now
// The hobbits are facing windy weather now
weather.timePasses();
// The weather changed to cold.
// The orcs are freezing cold.
// The hobbits are shivering in the cold weather.
// The orcs are facing cold weather now
// The hobbits are facing cold weather now
weather.timePasses();
// The weather changed to sunny.
// The sun hurts the orcs' eyes.
// The happy hobbits bade in the warm sun.
// The orcs are facing sunny weather now
// The hobbits are facing sunny weather now
```
## Class diagram

View File

@ -33,7 +33,9 @@ package com.iluwatar.observer {
+ RAINY {static}
+ SUNNY {static}
+ WINDY {static}
+ description String
+ toString() : String
+ getDescription() : String
+ valueOf(name : String) : WeatherType {static}
+ values() : WeatherType[] {static}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -35,21 +35,6 @@ public class Hobbits implements WeatherObserver {
@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;
}
LOGGER.info("The hobbits are facing " + currentWeather.getDescription() + " weather now");
}
}

View File

@ -35,21 +35,6 @@ public class Orcs implements WeatherObserver {
@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;
}
LOGGER.info("The orcs are facing " + currentWeather.getDescription() + " weather now");
}
}

View File

@ -28,7 +28,20 @@ package com.iluwatar.observer;
*/
public enum WeatherType {
SUNNY, RAINY, WINDY, COLD;
SUNNY("Sunny"),
RAINY("Rainy"),
WINDY("Windy"),
COLD("Cold");
private final String description;
WeatherType(String description) {
this.description = description;
}
public String getDescription() {
return this.description;
}
@Override
public String toString() {

View File

@ -36,21 +36,6 @@ public class GHobbits implements Race {
@Override
public void update(GWeather weather, WeatherType weatherType) {
switch (weatherType) {
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;
}
LOGGER.info("The hobbits are facing " + weatherType.getDescription() + " weather now");
}
}

View File

@ -36,21 +36,6 @@ public class GOrcs implements Race {
@Override
public void update(GWeather weather, WeatherType weatherType) {
switch (weatherType) {
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;
}
LOGGER.info("The orcs are facing " + weatherType.getDescription() + " weather now");
}
}

View File

@ -36,10 +36,10 @@ public class HobbitsTest extends WeatherObserverTest<Hobbits> {
@Override
public Collection<Object[]> dataProvider() {
return List.of(
new Object[]{WeatherType.SUNNY, "The happy hobbits bade in the warm sun."},
new Object[]{WeatherType.RAINY, "The hobbits look for cover from the rain."},
new Object[]{WeatherType.WINDY, "The hobbits hold their hats tightly in the windy weather."},
new Object[]{WeatherType.COLD, "The hobbits are shivering in the cold weather."});
new Object[]{WeatherType.SUNNY, "The hobbits are facing Sunny weather now"},
new Object[]{WeatherType.RAINY, "The hobbits are facing Rainy weather now"},
new Object[]{WeatherType.WINDY, "The hobbits are facing Windy weather now"},
new Object[]{WeatherType.COLD, "The hobbits are facing Cold weather now"});
}
/**

View File

@ -36,10 +36,10 @@ public class OrcsTest extends WeatherObserverTest<Orcs> {
@Override
public Collection<Object[]> dataProvider() {
return List.of(
new Object[]{WeatherType.SUNNY, "The sun hurts the orcs' eyes."},
new Object[]{WeatherType.RAINY, "The orcs are dripping wet."},
new Object[]{WeatherType.WINDY, "The orc smell almost vanishes in the wind."},
new Object[]{WeatherType.COLD, "The orcs are freezing cold."});
new Object[]{WeatherType.SUNNY, "The orcs are facing Sunny weather now"},
new Object[]{WeatherType.RAINY, "The orcs are facing Rainy weather now"},
new Object[]{WeatherType.WINDY, "The orcs are facing Windy weather now"},
new Object[]{WeatherType.COLD, "The orcs are facing Cold weather now"});
}
/**

View File

@ -38,10 +38,10 @@ public class GHobbitsTest extends ObserverTest<GHobbits> {
@Override
public Collection<Object[]> dataProvider() {
return List.of(
new Object[]{WeatherType.SUNNY, "The happy hobbits bade in the warm sun."},
new Object[]{WeatherType.RAINY, "The hobbits look for cover from the rain."},
new Object[]{WeatherType.WINDY, "The hobbits hold their hats tightly in the windy weather."},
new Object[]{WeatherType.COLD, "The hobbits are shivering in the cold weather."}
new Object[]{WeatherType.SUNNY, "The hobbits are facing Sunny weather now"},
new Object[]{WeatherType.RAINY, "The hobbits are facing Rainy weather now"},
new Object[]{WeatherType.WINDY, "The hobbits are facing Windy weather now"},
new Object[]{WeatherType.COLD, "The hobbits are facing Cold weather now"}
);
}

View File

@ -38,10 +38,10 @@ public class OrcsTest extends ObserverTest<GOrcs> {
@Override
public Collection<Object[]> dataProvider() {
return List.of(
new Object[]{WeatherType.SUNNY, "The sun hurts the orcs' eyes."},
new Object[]{WeatherType.RAINY, "The orcs are dripping wet."},
new Object[]{WeatherType.WINDY, "The orc smell almost vanishes in the wind."},
new Object[]{WeatherType.COLD, "The orcs are freezing cold."}
new Object[]{WeatherType.SUNNY, "The orcs are facing Sunny weather now"},
new Object[]{WeatherType.RAINY, "The orcs are facing Rainy weather now"},
new Object[]{WeatherType.WINDY, "The orcs are facing Windy weather now"},
new Object[]{WeatherType.COLD, "The orcs are facing Cold weather now"}
);
}