observers design pattern final