Apply Factory & Command pattern to encapsulation commands from user
Merge branch 'develop'