implémentation observer template