framework -9 observer pattern complete