Observer pattern

Add Observer pattern