add observer/observable interface