add observer pattern
add observer pattern