observer design pattern.