Observer pattern implemented