GenericFactory implement