Refactor the code to use some Design Pattern and strengths of Java
WIP
Fix some miss understounds with refactor