demo Observer pattern