@startuml package com.iluwatar.event.aggregator { class App { + App() + main(args : String[]) {static} } enum Event { + STARK_SIGHTED {static} + TRAITOR_DETECTED {static} + WARSHIPS_APPROACHING {static} - description : String + toString() : String + valueOf(name : String) : Event {static} + values() : Event[] {static} } abstract class EventEmitter { - observers : List + EventEmitter() + EventEmitter(obs : EventObserver) # notifyObservers(e : Event) + registerObserver(obs : EventObserver) + timePasses(Weekday) {abstract} } interface EventObserver { + onEvent(Event) {abstract} } class KingJoffrey { - LOGGER : Logger {static} + KingJoffrey() + onEvent(e : Event) } class KingsHand { + KingsHand() + KingsHand(obs : EventObserver) + onEvent(e : Event) + timePasses(day : Weekday) } class LordBaelish { + LordBaelish() + LordBaelish(obs : EventObserver) + timePasses(day : Weekday) } class LordVarys { + LordVarys() + LordVarys(obs : EventObserver) + timePasses(day : Weekday) } class Scout { + Scout() + Scout(obs : EventObserver) + timePasses(day : Weekday) } enum Weekday { + FRIDAY {static} + MONDAY {static} + SATURDAY {static} + SUNDAY {static} + THURSDAY {static} + TUESDAY {static} + WEDNESDAY {static} - description : String + toString() : String + valueOf(name : String) : Weekday {static} + values() : Weekday[] {static} } } EventEmitter --> "-observers" EventObserver KingJoffrey ..|> EventObserver KingsHand ..|> EventObserver KingsHand --|> EventEmitter LordBaelish --|> EventEmitter LordVarys --|> EventEmitter Scout --|> EventEmitter @enduml