[upd] add observer pattern
[upd] refact
[add] state and strategy