Some ideas on how to implement the observer pattern with good interface segregation.