init factory method pattern