Refactorizacion completa del código aplicando el patron observador