class Subject { - observers: Observer [] + constructor(); + subscribe(observer: Observer); + unsubscribeAll(); + unsubscribe(observer); + notifiSubstribers(); } class Observer { + {abstract} update(src: Subject); } class Fish extends Subject { - species: String; - weight: Number; + constructor(weight: Number); + getWeight(): Number; + getSpecies(): String; } class Salmon extends Fish { + constructor(); } class Tuna extends Fish { + constructor(); } class Fisherman extends Observer { - name: String; + constructor(name: String); + update(src); } Fisherman "1" -left- "many" Fish : has