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 
