Observer Design Pattern Fully functional Implementation