impl Observer pattern
impl Observer practice