Use enums instead os switch blocks
Its better to use enums instead of switch blocks which makes the code longer and difficult to maintain as and when new state appears.
This commit is contained in:
parent
cd20e7a3f4
commit
0c83ccc2fe
@ -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
|
||||
|
@ -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}
|
||||
}
|
||||
|
BIN
observer/etc/observer_with_generics.png
Normal file
BIN
observer/etc/observer_with_generics.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 102 KiB |
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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"});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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"});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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"}
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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"}
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user