design pattern notes: observer pattern.