add GenericFactory + exemple main