Factory Pattern Initial commit