change constructor from public to private
add factory method