add design pattern observer