mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-15 16:58:56 +00:00
0c83ccc2fe
Its better to use enums instead of switch blocks which makes the code longer and difficult to maintain as and when new state appears.
83 lines
2.2 KiB
Plaintext
83 lines
2.2 KiB
Plaintext
@startuml
|
|
package com.iluwatar.observer {
|
|
class App {
|
|
- LOGGER : Logger {static}
|
|
+ App()
|
|
+ main(args : String[]) {static}
|
|
}
|
|
class Hobbits {
|
|
- LOGGER : Logger {static}
|
|
+ Hobbits()
|
|
+ update(currentWeather : WeatherType)
|
|
}
|
|
class Orcs {
|
|
- LOGGER : Logger {static}
|
|
+ Orcs()
|
|
+ update(currentWeather : WeatherType)
|
|
}
|
|
class Weather {
|
|
- LOGGER : Logger {static}
|
|
- currentWeather : WeatherType
|
|
- observers : List<WeatherObserver>
|
|
+ Weather()
|
|
+ addObserver(obs : WeatherObserver)
|
|
- notifyObservers()
|
|
+ removeObserver(obs : WeatherObserver)
|
|
+ timePasses()
|
|
}
|
|
interface WeatherObserver {
|
|
+ update(WeatherType) {abstract}
|
|
}
|
|
enum WeatherType {
|
|
+ COLD {static}
|
|
+ RAINY {static}
|
|
+ SUNNY {static}
|
|
+ WINDY {static}
|
|
+ description String
|
|
+ toString() : String
|
|
+ getDescription() : String
|
|
+ valueOf(name : String) : WeatherType {static}
|
|
+ values() : WeatherType[] {static}
|
|
}
|
|
}
|
|
package com.iluwatar.observer.generic {
|
|
class GHobbits {
|
|
- LOGGER : Logger {static}
|
|
+ GHobbits()
|
|
+ update(weather : GWeather, weatherType : WeatherType)
|
|
}
|
|
class GOrcs {
|
|
- LOGGER : Logger {static}
|
|
+ GOrcs()
|
|
+ update(weather : GWeather, weatherType : WeatherType)
|
|
}
|
|
class GWeather {
|
|
- LOGGER : Logger {static}
|
|
- currentWeather : WeatherType
|
|
+ GWeather()
|
|
+ timePasses()
|
|
}
|
|
abstract class Observable<S extends Observable, O extends Observer<S, O, A>, A> {
|
|
# observers : List<O extends Observer<S, O, A>>
|
|
+ Observable<S extends Observable, O extends Observer<S, O, A>, A>()
|
|
+ addObserver(observer : O extends Observer<S, O, A>)
|
|
+ notifyObservers(argument : A)
|
|
+ removeObserver(observer : O extends Observer<S, O, A>)
|
|
}
|
|
interface Observer<S extends Observable<S, O, A>, O extends Observer, A> {
|
|
+ update(S extends Observable<S, O, A>, A) {abstract}
|
|
}
|
|
interface Race {
|
|
}
|
|
}
|
|
Weather --> "-currentWeather" WeatherType
|
|
GWeather --> "-currentWeather" WeatherType
|
|
Weather --> "-observers" WeatherObserver
|
|
Hobbits ..|> WeatherObserver
|
|
Orcs ..|> WeatherObserver
|
|
GHobbits ..|> Race
|
|
GOrcs ..|> Race
|
|
GWeather --|> Observable
|
|
Race --|> Observer
|
|
@enduml
|