- addded RAII observer pattern
- register and unregister from subject