Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified
and updated automatically.
## Explanation
Real world example
> In a land far away lives the races of hobbits and orcs. Both of them are mostly outdoors so they closely follow the changes in weather. One could say that they are constantly observing the weather.
> In a land far away lives the races of hobbits and orcs. Both of them are mostly outdoors so they closely follow the changes in weather. One could say that they are constantly observing the weather.
In plain words
> Register as an observer to receive state changes in the object.
> Register as an observer to receive state changes in the object.
Wikipedia says
...
...
@@ -46,22 +46,7 @@ public class Orcs implements WeatherObserver {
@Override
publicvoidupdate(WeatherTypecurrentWeather){
switch(currentWeather){
caseCOLD:
LOGGER.info("The orcs are freezing cold.");
break;
caseRAINY:
LOGGER.info("The orcs are dripping wet.");
break;
caseSUNNY:
LOGGER.info("The sun hurts the orcs' eyes.");
break;
caseWINDY:
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
publicvoidupdate(WeatherTypecurrentWeather){
switch(currentWeather){
caseCOLD:
LOGGER.info("The hobbits are shivering in the cold weather.");
break;
caseRAINY:
LOGGER.info("The hobbits look for cover from the rain.");
break;
caseSUNNY:
LOGGER.info("The happy hobbits bade in the warm sun.");
break;
caseWINDY:
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.