init
add Factory Pattern