@startuml "observer"
interface "Observer" as obs {
{method} + notify()
}
interface "AttachableSubject" as attach {
{method} + attach(listener: Observer)
}
interface "DetachableSubject" as detach {
{method} + detach(listener: Observer)
}
interface "Subject" as sub {
{method} + notify()
}
interface "MutableSubject" as mutsub {
}
mutsub --|> attach
mutsub --|> detach
mutsub --|> sub
struct "VectorSubject" as vecsub {
{field} - listeners: Vec<Observer>
}
vecsub .u.|> mutsub
vecsub --> obs
struct "HashSubject" as hshsub {
{field} - listeners: HashSet<Observer + Hash>
}
hshsub ..|> mutsub
hshsub --> obs
@enduml