Add observer,template pattern