Add Observer pattern implementation