code refactor
add factory method
+ gson