@startuml interface Subject{ attach() detach() notifyObservers() } class TemperatureSensor{ -observers:ArrayList of Observer -tempState:int attach() detach() notifyObservers() getTemp() setTemp() } interface Observer{ update() } class AverageDisplay{ -sum:float -count:int update() display() } class NumericDisplay{ -value:int update() display() } class TextDisplay{ -value:int update() display() } class MainDriver{ main() } Subject <|--- TemperatureSensor TemperatureSensor ---> Observer Observer <|--- AverageDisplay Observer <|--- NumericDisplay Observer <|--- TextDisplay @enduml