@startuml package com.iluwatar.bloc { class State { - value : int + State(value : int) + getValue() : int } interface StateListener { + onStateChange(state : T) } interface ListenerManager { + addListener(listener : StateListener) + removeListener(listener : StateListener) + getListeners() : List> } class BloC { - currentState : State - listeners : List> + BloC() + addListener(listener : StateListener) + removeListener(listener : StateListener) + getListeners() : List> - emitState(newState : State) + increment() + decrement() } class Main { + main(args : String[]) } ListenerManager <|.. BloC StateListener <|.. BloC BloC o-- State BloC *-- StateListener } @enduml