factory pattern with adstract and static examples and overloaded methods